Настройка AltLinux

Имя узла

Имя узла находится в файле /etc/sysconfig/network. За имя узла и имя домена отвечают опции HOSTNAME и DOMAINNAME в этом файле. Например, значения могут быть такими:

HOSTNAME=inet.stupin.su
DOMAINNAME=stupin.su

Чтобы поменять имя узла сразу, можно воспользоваться соответствующими командами:

# hostname -f inet.stupin.su
# hostname inet

Часовой пояс

Часовой пояс настраивается в файле /etc/sysconfig/clock. Для этого нужно задать значение переменной ZONE:

ZONE="Asia/Yekaterinburg"

Однако, при попытке применить изменения, я наталкивался на ошибку:

# /etc/init.d/clock tzset
Setting timezone information initlog: execvp: No such file or directory
[FAILED]

Заглянул вовнутрь файла /etc/init.d/clock и нашёл, что часовой пояс устанавливается командой /usr/sbin/tzupdate, которой в системе нет. С помощью скрипта apt-file, который описан ниже, я нашёл пакет, в котором находится эта команда и доустановил его:

# apt-get install tzdata

После чего часовой пояс установился успешно:

# /etc/init.d/clock tzset
Setting timezone information [ DONE ]
# date
Fri Jun 17 22:48:46 YEKT 2016

Поскольку внутри domU отсутствует устройство /dev/rtc, отвечающее за часы реального времени, можно отключить попытки считывать и записывать время в аппаратные часы. Для этого нужно прописать в том же файле /etc/sysconfig/clock такие значения переменных:

HWCLOCK_SET_TIME_AT_START=false
HWCLOCK_SET_AT_HALT=false
HWCLOCK_ADJUST=false

Настройка сетевого интерфейса

Во-первых, нужно задать метод конфигурирования интерфейса в файле /etc/net/ifaces/eth0/options:

BOOTPROTO=static

Описание других опций и их возможных значений можно посмотреть в man etcnet-options.

Во-вторых, нужно настроить IP-адрес и маску подсети на интерфейсе. Для этого впишем в файл /etc/net/ifaces/eth0/ipv4address:

169.254.254.10/24

В-третьих, настроим маршрут по умолчанию. Для этого создадим файл /etc/net/ifaces/eth0/ipv4route и впишем один маршрут:

default via 169.254.254.1

В этот файл можно вписывать несколько маршрутов, по одному в строчке.

В-четвёртых, настроим DNS-клиент. Для этого создадим файл /etc/net/ifaces/eth0/resolv.conf и впишем туда настройки:

search stupin.su
nameserver 169.254.254.1

Дополнительно, можно указать настройки интерфейса, которые будут переданы утилите ethtool. Вписать эти настройки нужно в соответствующий файл /etc/net/ifaces/eth0/ethtool. Например, чтобы отключить согласование скорости и принудительно выставить скорость в 10 Мбит/с, можно вписать туда такие опции:

speed 10 autoneg off

Реально будет выполнена такая команда настройки интерфейса:

ethtool -s eth0 speed 10 autoneg off

Поскольку у ethtool есть много других опций, кроме -s, то применимость файла /etc/net/ifaces/eth0/ethtool довольно ограничена. Чтобы выполнить другие команды настройки интерфейса, можно воспользоваться файлом /etc/net/iface/eth0/ifup-post, в который вписать команду, которую нужно выполнить после активации интерфейса. Например, вот так:

/usr/sbin/ethtool -K eth0 tx off

О других файлах для настройки сетевых интерфейсов можно почитать на странице man etcnet или по ссылке Подсказки пользователю /etc/net

Для введения настроек в силу я не нашёл ничего лучшего, чем выполнить последовательно две команды:

# ifdown eth0 ; ifup eth0

Однако, если вы выполняете эти команды подключившись к серверу по сети именно через этот интерфейс, то выполнение этих команд может быть чревато разрывом связи после выполнения первой команды до выполнения второй. Вторая команда может при этом и не выполниться.

Настройка репозиториев

Первое, на что я обратил внимание, это то, что в системе уже имеются файлы-заготовки с источниками для скачивания пакетов. В каталоге /etc/apt/sources.list.d имеются следующие файлы:

  • alt.list
  • heanet.list
  • informika.list - был в p7, нет в p8
  • ipsl.list
  • kiev.list - был в p7, нет в p8
  • yandex.list

В каждом файле есть закомментированные строчки с репозиториями, находящимися на различных серверах. По умолчанию раскомментированы только строчки в файле alt.list, соответствующие протоколу HTTP.

Подробнее о ветках и архитектурах дистрибутива, а также о разделах репозиториев можно почитать тут: Репозитории ALT Linux

Я не знаю, есть ли в AltLinux у пакетов необязательные зависимости. Найти опций apt, которые бы отключали установку рекомендуемых и предлагаемых необязательных зависимостей, как в Debian, мне не удалось. Поэтому я просто запросил свежий список пакетов в репозитории и установил обновления:

# apt-get update
# apt-get upgrade

Заметно, что AltLinux'овский apt-get upgrade справляется с обновлениями гораздо быстрее, чем Debian'овский. Приятно порадовала свежесть пакетов - в репозитории имеется наисвежайший на момент написания этой статьи Zabbix 3.0.3

Подробнее об управлении пакетами в AltLinux можно почитать по двум ссылкам:

apt-file в AltLinux

Самая "замечательная" особенность дистрибутива заключается в отсутствии утилиты, подобной apt-file. Кажется, что пользователей и разработчиков дистрибутива это совсем не смущает. Разработчики предпочитают потратить время на разработку всяких программ типа alterator, но не предусматривают возможности решить такую простую задачу: найти пакет, в котором есть утилита strings. Пришлось соображать и соорудить замену из спичек и желудей на shell'e:

#!/bin/sh

contents_index=/root/contents_index

update()
{
  cat /etc/apt/sources.list /etc/apt/sources.list.d/* \
    | egrep -v '^(#|\s*$)' \
    | while read pkgtype sign url arch part ; do
        curl -L "$url/$arch/base/contents_index"
      done \
   > $contents_index
}

search()
{
  file="$1"

  if [ "$file" = "" ]
  then
    echo "apt-file search <file>"
  else
    if [ ! -f $contents_index ]
    then
      echo "apt-file update"
    else
      cat $contents_index \
        | awk -v file="$file" '$1 ~ file { print $2 ":\t" $1; }'
    fi
  fi
}

show()
{
  package="$1"

  if [ "$package" = "" ]
  then
    echo "apt-file show <package>"
  else
    if [ ! -f $contents_index ]
    then
      echo "apt-file update"
    else
      cat $contents_index \
        | awk -v package="$package" '$2 == package { print $2 ":\t" $1; }'
    fi
  fi
}

mode="$1"
arg="$2"

if [ "$mode" = "update" ]
then
  update
elif [ "$mode" = "search" ]
then
  search "$arg"
elif [ "$mode" = "show" ]
then
  show "$arg"
else
  echo "apt-file update"
  echo "apt-file search <file>"
  echo "apt-file show <package>"
fi

Скрипт в целом ведёт себя привычным образом, как и программа apt-file из Debian. Но, поскольку сооружена из подручных средств, не учитывает несколько моментов:

  • Один и тот же пакет может встречаться в нескольких источниках. Результаты поиска при этом будут задваиваться, затраиваться и т.д.
  • Скрипт не учитывает что в строке с источникам может отсутствовать столбец, указывающий ключ, которым подписан репозиторий. Например, "[p7]". Если такие источники указаны, то скрипт работать не будет.
  • Соответственно, скрипт не проверяет подписи источников.
  • Скрипт умеет работать только с HTTP-источниками. Если в списке есть источники FTP или Rsync, то скрипт работать не будет.

Наверняка имеются ещё какие-то недоработки, но свою задачу я решил. Например, найти все пакеты, в которых есть программа strings, можно так:

# cd /root
# ./apt-file update
# ./apt-file search bin/strings$

После этого мне удалось найти почти привычным способом имена пакетов, которые я обычно доустанавливаю в Debian. Вот этот список для AltLinux:

# apt-get install vim-console curl binutils net-tools screen rsync
# apt-get install sysstat tcpdump bind-utils telnet psmisc curl
# apt-get install openntpd sudo postfix mailx logwatch

Установка и настройка Zabbix-агента

Установим Zabbix-агента:

# apt-get install zabbix-agent

Установка в Xen

$ wget http://ftp.altlinux.org/pub/distributions/ALTLinux/p8/images/starterkits/basealt-p8-vm-net-20160612-x86_64.img.xz
$ 7z x basealt-p8-vm-net-20160612-x86_64.img.xz

# lvcreate -n image -L 622854144b stupin
# dd if=/home/stupin/basealt-p8-vm-net-20160612-x86_64.img of=/dev/mapper/stupin-image
# partprobe 
# mount /dev/mapper/stupin-image1 /mnt/image

etc/inittab:

1:2345:respawn:/sbin/mingetty hvc0
#1:2345:respawn:/sbin/mingetty --noclear tty1
#2:2345:respawn:/sbin/mingetty tty2

etc/fstab:

/dev/xvda     /                       ext4    relatime                        1 1
#UUID=5b7c2d58-0afa-4bf4-9a42-542935636a05 / ext4 relatime 1 1

boot/grub:

# cd /mnt/root/boot
# mkdir grub

boot/grub/menu.lst:

default         0
timeout         2

title           BaseAlt p8 x86_64
root            (hd0,0)
kernel          /boot/vmlinuz root=/dev/xvda ipv6.disable=1 ro
initrd          /boot/initrd.img

title           BaseAlt p8 x86_64 (Single-User)
root            (hd0,0)
kernel          /boot/vmlinuz root=/dev/xvda ipv6.disable=1 ro single
initrd          /boot/initrd.img

# chroot /mnt/root
# passwd
# exit

# cd /mnt/image
# tar cjvf /home/stupin/basealt-p8-vm-net-20160612-x86_64.tbz *

# umount /mnt/image
# dd if=/dev/zero of=/dev/mapper/stupin-image
# partprobe
# lvremove /dev/mapper/stupin-image

Ошибки сети в Xen

В процессе работы с виртуальной машиной по SSH соединение разрывается со следующими сообщениями об ошибках:

Corrupted MAC on input.
Disconnecting: Packet corrupt

В интернете можно найти рекомендации отключить вычисление контрольных сумм пакетов на сетевой карте при помощи такой команды:

# ethtool -K eth0 tx off

Если зайти на виртуальную машину и посмотреть соответствующие настройки сетевой карты, то можно увидеть, что вычисление контрольной суммы включено:

# ethtool -k eth0
Offload parameters for eth0:
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp-segmentation-offload: on
udp-fragmentation-offload: off
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off
rx-vlan-offload: off
tx-vlan-offload: off
ntuple-filters: off
receive-hashing: off

Однако попытки выключить вычисление контрольных сумм при передаче пакета не приводит к действительному отключению:

# ethtool -K eth0 tx off
# ethtool -k eth0
Offload parameters for eth0:
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp-segmentation-offload: on
udp-fragmentation-offload: off
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off
rx-vlan-offload: off
tx-vlan-offload: off
ntuple-filters: off
receive-hashing: off

При этом, на хост-машине посмотреть такие же настройки на виртуальной сетевой карте гостевой машины, то можно увидеть гораздо больше настроек, хоть некоторые из них и не доступны для изменения:

# ethtool -k vif2.0
Features for vif2.0:
rx-checksumming: on [fixed]
tx-checksumming: on
    tx-checksum-ipv4: on
    tx-checksum-ip-generic: off [fixed]
    tx-checksum-ipv6: on
    tx-checksum-fcoe-crc: off [fixed]
    tx-checksum-sctp: off [fixed]
scatter-gather: on
    tx-scatter-gather: on
    tx-scatter-gather-fraglist: off [fixed]
tcp-segmentation-offload: on
    tx-tcp-segmentation: on
    tx-tcp-ecn-segmentation: off [fixed]
    tx-tcp6-segmentation: on
udp-fragmentation-offload: off [fixed]
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off [fixed]
rx-vlan-offload: off [fixed]
tx-vlan-offload: off [fixed]
ntuple-filters: off [fixed]
receive-hashing: off [fixed]
highdma: off [fixed]
rx-vlan-filter: off [fixed]
vlan-challenged: off [fixed]
tx-lockless: off [fixed]
netns-local: off [fixed]
tx-gso-robust: off [fixed]
tx-fcoe-segmentation: off [fixed]
tx-gre-segmentation: off [fixed]
tx-ipip-segmentation: off [fixed]
tx-sit-segmentation: off [fixed]
tx-udp_tnl-segmentation: off [fixed]
tx-mpls-segmentation: off [fixed]
fcoe-mtu: off [fixed]
tx-nocache-copy: off
loopback: off [fixed]
rx-fcs: off [fixed]
rx-all: off [fixed]
tx-vlan-stag-hw-insert: off [fixed]
rx-vlan-stag-hw-parse: off [fixed]
rx-vlan-stag-filter: off [fixed]
l2-fwd-offload: off [fixed]
busy-poll: off [fixed]

После того, как я переустановил систему, заменив образ AltLinux p7 на BaseAlt p8, внутри виртуалки команда ethtool стала выдавать на глаз столько же настроек, как и ethtool в хост-системе:

# ethtool -k eth0
Features for eth0:
rx-checksumming: on [fixed]
tx-checksumming: on
    tx-checksum-ipv4: on [fixed]
    tx-checksum-ip-generic: off [fixed]
    tx-checksum-ipv6: on
    tx-checksum-fcoe-crc: off [fixed]
    tx-checksum-sctp: off [fixed]
scatter-gather: on
    tx-scatter-gather: on
    tx-scatter-gather-fraglist: off [fixed]
tcp-segmentation-offload: on
    tx-tcp-segmentation: on
    tx-tcp-ecn-segmentation: off [fixed]
    tx-tcp6-segmentation: on
udp-fragmentation-offload: off [fixed]
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off [fixed]
rx-vlan-offload: off [fixed]
tx-vlan-offload: off [fixed]
ntuple-filters: off [fixed]
receive-hashing: off [fixed]
highdma: off [fixed]
rx-vlan-filter: off [fixed]
vlan-challenged: off [fixed]
tx-lockless: off [fixed]
netns-local: off [fixed]
tx-gso-robust: on [fixed]
tx-fcoe-segmentation: off [fixed]
tx-gre-segmentation: off [fixed]
tx-ipip-segmentation: off [fixed]
tx-sit-segmentation: off [fixed]
tx-udp_tnl-segmentation: off [fixed]
fcoe-mtu: off [fixed]
tx-nocache-copy: off
loopback: off [fixed]
rx-fcs: off [fixed]
rx-all: off [fixed]
tx-vlan-stag-hw-insert: off [fixed]
rx-vlan-stag-hw-parse: off [fixed]
rx-vlan-stag-filter: off [fixed]
l2-fwd-offload: off [fixed]
busy-poll: off [fixed]

Ошибка 31465 - mount: /root/run: filesystem mounted, but mount(8) failed: No such file or directory

Файл для исправления этой ошибки: /usr/share/make-initrd/data/lib/initrd/modules/980-umount

[    4.514175] EXT4-fs (xvda): Unrecognized mount option "realtime" or missing value