• install Canon B210 on Linux

    download Xerox B210 Linux PrintDriver Utilities, unpack it

    then

    /usr/sbin/lpadmin -p Xerox_B210  -E -v parallel:/dev/usb/lp0 -P /usr/local/src/Xerox_B210_Linux_PrintDriver_Utilities/uld/noarch/share/ppd/Xerox_B210_Series.ppd
    /usr/sbin/lpadmin -p Xerox_B210 -o PageSize=A4
  • grow raid10 volume adaptec, new drives

    first, backup data and then remove existsing volume

    arcconf getconfig 2
    arcconf DELETE 2 LOGICALDRIVE 2

    replace physical drives, then init drives, create volume

    arcconf getconfig 2  | grep -A12 -B5 -Ei '(0\,26|0\,27|0\,28|0\,29)'
    arcconf TASK START 2 DEVICE 0 26 initialize
    arcconf TASK START 2 DEVICE 0 27 initialize
    arcconf TASK START 2 DEVICE 0 28 initialize
    arcconf TASK START 2 DEVICE 0 29 initialize
    arcconf CREATE 2 LOGICALDRIVE name VOL-R10  MAX 10 0 26 0 27 0 28 0 29
  • build python from sources

    A list of available Python versions can be found on python.org.

    export PYTHON_VERSION=3.11.5
    export PYTHON_MAJOR=3

    prepare to build

    curl -O https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz
    tar -xvzf Python-${PYTHON_VERSION}.tgz
    cd Python-${PYTHON_VERSION}

    build

    ./configure --enable-optimizations --with-lto=full --prefix=/opt/python/${PYTHON_VERSION} --libdir=/opt/python/${PYTHON_VERSION}/lib
    make
    sudo make install

    make changes to /etc/profile.d/python.sh

    # add python startup script for interactive sessions
    export PYTHONSTARTUP=/etc/pythonstart
    PATH=/opt/python/3.11.5/bin/:$PATH

    set alternatives

    update-alternatives --install /usr/bin/python3 python3 /opt/python/3.11.5/bin/python3.11 1
    update-alternatives --config python3
  • sqlite database for postfix and dovecot

    init.sql

    CREATE TABLE IF NOT EXISTS `virtual_aliases` (
      `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, 
      `domain_id` int(11) NOT NULL,
      `source` varchar(100) NOT NULL,
      `destination` varchar(100) NOT NULL,
      FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
    );
    CREATE TABLE IF NOT EXISTS `virtual_domains` (
      `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
      `name` varchar(50) NOT NULL
    );
    CREATE TABLE IF NOT EXISTS `virtual_users` (
      `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, 
      `domain_id` int(11) NOT NULL,
      `password` varchar(106) NOT NULL,
      `email` varchar(100) NOT NULL,
      FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE,
      UNIQUE (domain_id,email) ON CONFLICT REPLACE
    );

    mailbox.sh

    #!/bin/bash
    regex="^[a-z0-9!#\$%&'*+/=?^_\`{|}~-]+(\.[a-z0-9!#$%&'*+/=?^_\`{|}~-]+)*@([a-z0-9]([a-z0-9-]*[a-z0-9])?\.)+[a-z0-9]([a-z0-9-]*[a-z0-9])?\$"
    sqlitedb="/etc/postfix/mail.db"
    initdb() {
        sqlite3 $sqlitedb < /usr/local/sys/mail/init.sql
    }
    initdb
    mailbox_add() {
    if [ -z "$1" ] ; then
        echo "no mailbox set"
        return
    fi
    if [ -z "$2" ] ; then
        echo "no password set"
        return
    fi
    if ! [[ $1 =~ $regex ]] ; then
        echo "bad email"
        return
    fi
    domain=$(echo $1 | cut -f2 -d@)
    domain_id=$(sqlite3 $sqlitedb "select id from virtual_domains where name=\"$domain\"")
    if  [ "$domain_id" = "" ];then
        sqlite3 $sqlitedb "insert into virtual_domains (name) values (\"$domain\")"
            domain_id=$(sqlite3 $sqlitedb "select id from virtual_domains where name=\"$domain\"")
    fi
    password=`doveadm pw -s SHA512-CRYPT -p $2  | cut -b15-`
    echo  $password
    sqlite3 $sqlitedb "insert into virtual_users(domain_id,email,password) values ($domain_id,\"$1\",\"$password\")"
    }
    mailbox_del() {
    echo $1 
    }
    mailbox_modify() {
    echo $1 
    # not implemented, add delete from
    }
    case "$1" in
      "a")
              mailbox_add $2 $3
      ;;
      "d")
              mailbox_del $2
      ;;
      "m")
              mailbox_modify $2
      ;;
      *)
          echo "param 1 must be one of a(add) d(delete) m (modify)"
          exit 1
      ;;
    esac
    chown vmail:vmail $sqlitedb
  • firewall whitelist

    #!/bin/bash
    # delete rules (if exists)
    for num in `iptables -L INPUT -n -v --line-numbers | grep whitelist | awk '{print $1}' | sort -nr`  ; do iptables  -D INPUT  $num ;  done
    #exit 0
    # delete whitelist list
    ipset -X whitelist
    # create new whitelist
    ipset -N whitelist nethash
    # download network list
    wget -O whitelist http://www.ipdeny.com/ipblocks/data/countries/{ru,ua,kz,by,uz,md,kg,de,am,az,ge,ee,tj,lv}.zone
    echo  'create whitelist ipset'
    list=$(cat /usr/local/sys/whitelist)
    net_count=$(cat /usr/local/sys/whitelist | wc -l)
    i=0
    BAR='####################' 
    #exit 0
    for ipnet in $list
     do
     ipset -A whitelist $ipnet
     i=$(($i+1))
     echo -ne "\r$((100*$i/$net_count))% ${BAR:0:$((20*$i/$net_count))}"
     done
    echo -ne "\ndone create whitelist\n"
    # drop all from non exUSSR countrys
    iptables -I  INPUT 1 -i ens3 -m set ! --match-set whitelist src -p tcp --dport 22 -j DROP
    iptables -I  INPUT 1 -i ens3 -m set ! --match-set whitelist src -p tcp --dport 80   -j DROP