воскресенье, 29 сентября 2013 г.

Англо-русский словарь в XFCE

Обычно я пользуюсь онлайн-словарями Google, однако однажды я задумался о том, можно ли заниматься переводами, не имея доступа в Интернет. Из всех программ-словарей мне понравилась только одна: xfce4-dict, остальные оказались излишне тяжёлыми и прегруженными функционалом.

Итак, всё что нужно, это три пакета - сервер словарей, клиент словарей и сам англо-русский словарь:
# apt-get install dictd xfce4-dict mueller7accent-dict
Настройка тривиальна:


Выглядит всё это следующим образом:

воскресенье, 22 сентября 2013 г.

Простейший почтовый релей на основе Postfix

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

Однако, для этого можно воспользоваться и почтовым сервером Postfix. Он обладает модульной структурой, а потому хорошо масштабируется и может использоваться как для построения крупных многодоменных почтовых систем с вирутальными учётными записями, поддержкой шифрования, фильтрации вирусов, защитой от спама, так и для создания простейших почтовых релеев. То что нам нужно.

Установим пакет с Postfix:
# apt-get install postfix
И отредактируем файл конфигурации Postfix /etc/postfix/main.cf, задав в нём следующие минимальные настройки:
myhostname = server.example.net
mydomain = example.net
inet_protocols = ipv4
inet_interfaces = 127.0.0.1
mydestination = $myhostname, localhost.$mydomain, localhost
mynetworks = 127.0.0.0/8
relayhost = [mail.example.net]
masquerade_domains = example.net

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
Этот файл задаёт имя сервера (myhostname), с которого будет отправляться почта, его почтовый домен (mydomain), почтовый сервер, принимающий почту (relayhost), и домен, которым будут дополняться локальные учётные записи (masquerade_domains).

Этот почтовый сервер будет принимать почту только на локальном интерфейсе.

Перезапустим почтовый сервер:
# /etc/init.d/postfix restart
Для использования в собственных скриптах можно использовать как команду sendmail из состава Postfix, так и почтовый клиент, запускаемый из командной строки. Например, команду mail из пакета bsd-mailx. Установить её можно как обычно:
# apt-get install bsd-mailx

воскресенье, 15 сентября 2013 г.

Решение проблемы с зеркалом mdadm после обновления ядра

После обновления системы на одном сервере, в процессе последующей перезагрузки, система не поднялась с сообщением вида:
mdadm: Devices UUID-<very long number> and UUID-<another number> have the same name: md1
mdadm: Duplicate MD device names in conf file were found.
Система не грузится, а через некоторое время BusyBox выводит приглашение:
(initramfs)
Один из симптомов заключается в том, что следующая команда не выдаёт ничего:
# mdadm --detail --scan
Причина была в том, что в файле /etc/mdadm/mdadm.conf имеются устаревшие данные о дисковых разделах.

С помощью следующей команды убедился, что новые данные определяются.
# mdadm --examine --scan
Записал обновлённые данные по разделам в конфиг mdadm:
# mdadm --examine --scan > /etc/mdadm/mdadm.conf
Запустил сборку массивов:
# mdadm --assemble --scan
Массивы обнаружились и собрались.

Ввёл команду для выхода из BusyBox (initramfs) и дальнейшей загрузки системы:
# exit
Залогинился в загрузившейся системе обновил файл /etc/mdadm/mdadm.conf в образе initramfs:
# mdadm --examine --scan > /etc/mdadm/mdadm.conf
# update-initramfs -u
И отправил систему на перезагрузку. Система загрузилась нормально.

Если из системы вынимался один из дисков, то отсутствующую половину зеркала можно добавить командами вида:
# mdadm --manage  /dev/md1 --add /dev/sda1
# mdadm --manage /dev/md3 --add /dev/sda3
За процессом пересборки зеркала можно наблюдать в /proc/mdstat.

воскресенье, 8 сентября 2013 г.

Настройка 3G-модема Huawei HiLink E303 Билайн для Debian Wheezy

В отличие от предыдущего, попавшегося мне 3G-модема, этот модем выглядит для системы как сетевая карта.

Всё далее описанное относится к тарифу "Оптимальный безлимит".

1. Активация SIM-карты.

Перед настройкой необходимо активировать SIM-карту. Для этого нужно вставить SIM-карту в телефон и позвонить по номеру *101*1111# После активации SIM-карту можно вставить в модем.

2. Устанавливаем пакет usb-switchmodem:
# apt-get install usb-modeswitch
3. Подключаем модем и смотрим с помощью команды, какая сетевая карта появится после подключения:
# ifconfig -a
Или можно посмотреть то же самое в журнале сообщений dmesg:
# dmesg
У меня уже было две сетевые карты с именами eth0 и eth1, а вновь появившаяся получила имя eth2. В дальнейших инструкциях используется именно это имя.

4. Настраиваем сеть.

Открываем на редактирование файл /etc/network/interfaces и добавляем настройки:
allow-hotplug eth2
iface eth2 inet dhcp
Теперь можно вынуть и вставить модем снова, чтобы интерфейс получил настройки по DHCP.

5. Настраиваем подключение.

Заходим в браузере на адрес http://192.168.1.1, а на открывшейся странице переходим по ссылке "Настройка". Далее создаём новый профиль.


В настройках профиля указываем его название, в поле APN вводим адрес home.beeline.org, поле имени и пароля оставляем пустыми:


Теперь осталось перезагрузить модем через меню или вынуть его и снова вставить в разъём. После перезагрузки начальная страница примет примерно такой вид:

На самом модеме при успешном подключении светодиод загорится голубым цветом:

воскресенье, 1 сентября 2013 г.

Intel RS2WC040 во FreeBSD 8.2

Однажды на работе передо мной поставили задачу: заставить работать RAID-контроллер Intel RS2WC040 во FreeBSD 8.2 архитектуры amd64 и сделать установочную флешку со встроенной поддержкой этого контроллера. Сейчас я подумал, что не стоит пропадать добру, и решил выложить рецепт, который у меня получился.

Подробнее о контроллере: Intel RAID Controller RS2WC040 (RTL) PCI-E x8, SAS / SATA-IIRAID0 / 1 / 5 / 10 / 50, 4-Channel

На самом деле контроллер этой модели может быть выполнен с использованием разных микросхем. Нас интересует контроллер с Vendor ID 0x1000 и Device ID 0x0073, который не поддерживается FreeBSD 8.2 и 9.0 из коробки. Точно установить, какой именно набор микросхем используется, можно с помощью команды pciconf. К сожалению, сейчас я не помню, какие дополнительные параметры нужно ей указать, а FreeBSD нет под рукой.

Для сборки ядра и подготовки установочной флешки нам понадобится уже установленная FreeBSD. Скачем с официального сайта образ загрузочной флешки FreeBSD-8.2-RELEASE-amd64-memstick.img, запишем образ на флешку. Скачаем из темы Installing FreeBSD 9 on the IBM System x3550 M3 исходники драйвера. Если заглянуть вовнутрь исходников драйвера, то там можно найти таблицу идентификаторов поддерживаемого оборудования, среди которых есть и интересующее нас.

Сборка ядра с драйвером

Загружаемся в установленную FreeBSD, записываем скачанный образ установочной флешки и монтируем её:
# dd if=FreeBSD-8.2-RELEASE-amd64-memstick.img of=/dev/da0
# mount /dev/da0 /mnt/install-flash
Если нет свободной флешки, можно смонтировать файл образа с помощью mdconfig:
# mdconfig -a -t vnode -f FreeBSD-8.2-RELEASE-amd64-memstick.img
# mount /dev/md0a /mnt/install-flash
Распаковываем исходники системы:
# cd /mnt/install-flash/8.2-RELEASE/src
# ./install.sh all
Переходим в каталог с драйверами устройств и заменяем исходники имеющегося драйвера mfi на исходники скачанного драйвера mfi:
# cd /usr/src/sys/dev/mfi
# rm *
# cp /root/mfi/* .
Редактируем файл /usr/src/sys/conf/files, после строчки
dev/mfi/mfi_cam.c optional mfi
добавляем строчку
dev/mfi/mfi_syspd.c optional mfi
Создаём свой файл конфигурации ядра. Переходим в каталог /usr/src/sys/amd64/conf и копируем файл GENERIC под именем RAID:
# cd /usr/src/sys/amd64/conf
# cp GENERIC RAID
Открываем файл RAID и комментируем в нём две строчки, добавив перед ними знак решётки:
device cbb #cardbus (yenta) bridge
и
makeoptions     DEBUG=-g
Вторая опция отменяет создание отладочной информации, которая занимает много места и нас не интересует.

Теперь переходим в каталог /usr/src, собираем и инсталлируем ядро:
# cd /usr/src
# make buildkernel KERNCONF=RAID
# make installkernel KERNCONF=RAID
Ядро собрано и установлено. Вернём старое ядро, а новое переместим на установочную флешку:
# cd /boot/
# mv kernel /mnt/install-flash/boot/
# mv kernel.old kernel
Новое ядро скопируем временно в каталог /root, где будем готовить его для внедрения в инсталлятор:
# cp -R /mnt/install-flash/boot/kernel /root/kernel
# cd /root
# mv kernel GENERIC
С этого момента инсталлятор на флешке уже может загружаться и видеть диски в RAID-контроллере. Можно даже поставить на диски RAID-контроллера систему, но она не сможет загрузиться, поскольку установленное ядро не содержит необходимый драйвер.

Подготовка собранного ядра для внедрения в инсталлятор

Запакуем подготовленное ядро, разрежем на части и удалим исходный тарболл:
# tar -czvf generic.tgz GENERIC
# split -b 1425408 generic.tgz generic.
# rm generic.tgz
Создадим файл generic.mtree:
# mtree -c -p GENERIC -k gname,mode,nlink,size,link,uname,md5digest > generic.mtree
Теперь можно удалить ядро из каталога /root:
# rm -R /root/GENERIC
Создадим файл generic.inf:
# /usr/src/release/scripts/info.sh generic > generic.inf
Подсчитаем контрольные суммы файлов:
# md5 generic.* > CHECKSUM.MD5
# sha256 generic.* > CHECKSUM.SHA256
У нас получились файлы generic с двухбуквенными расширениями (кусочки архива с ядром), файл generic.mtree, файл generic.inf и файлы контрольных сумм CHECKSUM.MD5 и CHECKSUM.SHA256.

Внедрение ядра в инсталлятор

Все эти файлы нам нужно поместить на установочную флеку в каталог 8.2-RELEASE/kernels взамен имеющихся.

Удалим ненужное:
# rm /mnt/install-flash/8.2-RELEASE/kernels/*
Переместим туда нужное:
# mv generic.* CHECKSUM.* /mnt/install-flash/8.2-RELEASE/kernels/*
Всё, теперь можно отмонтировать флешку и пользоваться инсталлятором:
# umount /mnt/install-flash
Если вы выполняли все манипуляции над образом, то можно отмонтировать его и записать на реальную флешку объёмом не менее 2 Гигабайт (всё её содержимое будет затёрто):
# umount /mnt/install-flash
# dd if=FreeBSD-8.2-RELEASE-amd64-memstick.img of=/dev/da0
Подобную методику можно использовать для внедрения любых сторонних драйверов в инсталлятор. Проще, конечно, сначала поставить систему, а потом пересобрать её с необходимым сторонним драйвером.

Единственная трудность в описанном случае заключается в том, что систему нужно собрать до её установки - нельзя поставить систему на RAID-контроллер, который ею не поддерживается, потом загрузить её и пересобрать уже с поддержкой RAID-контроллера. Чтобы разрубить этот гордиев узел, нужна промежуточная система, которую можно загрузить и собрать в ней этот драйвер. Инсталлятор, правда, было делать не обязательно, но я его и делал не для себя.