понедельник, 6 апреля 2015 г.

Planning Arch Linux Directory Model For Home Networks


Мотивация
Одной из причин отказа от фабричной Linux, установленной на один из entry-level NAS  архитектуры Marvell Korkwood, стала  негибкость управления "экспортируемыми ресурсами" с помощью встроенного (сразу оговорюсь, прекрасно продуманного) web-интерфейса.  Снова оговорюсь, что web admin tool превосходно "расшарит"  папку как таковую (или множество папок). Рассмотрим,  подойдёт ли web admin tool как инструмент планирования и реализации архитектуры ИС (например, модели каталогов).

Условия задачи
Разработать и имплементировать средствами ОС информационную модель домашнего сервера.

Начальные условия

Система задумана как файл-сервер, сервер для обслуживания версий кода (svn),  торрент-качалка  ( принимает от клиентов  торрент-файлы или магнитные ссылки, сохранённые в каталоги сервера, записывает закачки в разделяемые папки).
По мере накопления знаний и опыта  планируется запуск более специфических услуг: медиа- сервер, сервер time machine backup, сервер оцифровки медиа, BOINC-клиент.

В нашем распоряжении следующая архитектура (см иллюстрацию):
Hardware: I/O, HDD1, HDD2.
Software: Ос Linux, Unix - модель каталогов ("/" - root ), концепции "монтирования", "связывания" и службы экспорта каталогов.

Концепция
Приводится на иллюстрации.

Сорри, рисовал для себя.
Обозначу  очень кратко следующие моменты:
  • Разделение private и public ветвей ресурсов в древе каталогов;
  • Удобство "монтирования",  то есть построения связи rootfs и второй, массовой, файловой системы. Поменьше  точек монтирования в /mnt
  • Связать "узлы"  (ака корни дерева каталогов) массовой файловой сисемы (/dev/sdb) и rootfs (/dev/sdb)!  В перспективе экспорта каталогов несомненно удобнее в /etc/exports ссылаться на разумный минимум узлов  rootfs, указывающих на узлы массовой файловой системы
  • Опционально  думаем об удобстве администрирования системы. Например, если мы привыкли рассматривать /srv (в footfs, проще говоря "/" системного веника HDD1) традиционно как корневую систему для всяких сервисов, то необходимо создать ссылки на таковые подкаталоги сервисов (nfs, svn), физически реализованные в массовой файловой системе (попросту "большом" венике HDD2), чтобы мы всегда видели все "каталоги сервисов" в /srv

Сформулирую задачу планирования каталогов Unix более абстрактно:
  • "Разделяй данные":  Пути для данных различной  природы (личные, публикуемые)  не пересекаются;
  • "Строй кратчайшие пути":  Построить кратчайшие пути от "/" (rootfs) к любому запланированному ресурсу в любой доступной  файловой сиcтеме;


Далее я сделал для себя вывод, что при всех достоинствах web tool не поможет мне справиться с реализацией спланированной архитектуры ввиду ограничения: он может создать папку в строго отведённом месте, и её расшарить. Если пункт 1  "разделяй данные" с помощью тула я решу, то вот 2 (оптимизация) - нет.



Реализация
Реализацию как рутинное добавление  записей-описателей  в файлы
/etc/fstab (directory model to physical model, map rootfs to massive data storage)
/etc/exports (exported resource model to directory model)
 рассматриваем как самостоятельное  упражнение.

Das Uboot: Switching Between Boot Methods


Мотивация
Подобно любому компьютеру, ZyXEL NSA  (далее текст применим к ряду родственных по архитектуре систем, подробный список которых можно найти в  [1, 2])умеет загружать операционную систему с различных дисков: 
встроенного flash небольшой ёмкости и внешнего (массового) накопителя большой ёмкости.  
В компьютерах данной архитектуры используется модуль загрузки Das Uboot [3].
Говоря условно, Das Uboot поддерживает два интересующих нас метода загрузки системы.
Будем называть их  "to Linux"  и "to Stock" .
В зависимости от условий эксплуатации Вашего NAS Вам могут понадобиться оба метода.
to Stock - если Вы используете  NAS как его рекомендует завод;
To Linux - если Вы хотите использовать NAS как платформу для установки любой поддерживаемой версии Linux, например, Arch Linux Arm.
Также может понадобиться вернуться временно или постоянно к "to Stock". 

Цель упражнения
переключить методы загрузки по схеме:
To Linux -> to Stock -> to Linux.

Условия задачи
Мы рассматриваем два состояния (уровня выполнения программ) ZyXEL NSA:
  • Активна (запущена) операционная система Linux / Linux is up and running;
  • Активна программа начальной загрузки / Uboot is running.
Метод загрузки определяется  конфигурационным параметром  Das Uboot Environment[4]

bootcmd

значение которого  сохраняется в энергонезависимой памяти (flash) и используется   Das Uboot[3].
Переключать метод загрузки мы будем при активном состоянии Linux.

Способы доступа к параметрам конфигурации
Параметр bootcmd и другие параметры  Das Uboot Environment  доступны для чтения и редактирования.

Известны следующие способы управления параметрами.
  • Манипулирование с помощью CLI- интерфейса (программ):  fw_setenv / fw_printenv  [3];  
Программы fw_setenv / fw_printenv находятся: в stock-версии Linux в /zyxel/sbin, в третьих сборках (например, Arch Linux Arm) программы необходимо установить.  Пример установки в Arch Linux:

$sudo pacman -Sy uboot-env uboot-mkimage

  • Манипулирование с помощью команд Das Uboot. Для этого необходимо использовать подключение программы terminal к консоли (процессу Uboot) с помощью серийного подключения. Для этого потребуется схема подключения, конвертор serial -> USB  (Serial to USB TTL Converter).

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

Редактирование файла конфигурации fw_setenv

Для указания программе  fw_setenv устройства uboot, в котором хранятся конфигурационные параметры, необходимо отредактировать файл конфигурации:

$sudo nano  /etc/fw_env.config

В нём, так как мы работаем с ZyXEL NSA, необходимо создать строку, соответствующую модели uboot для ZyXEL NSA [3]
/dev/mtd1               0x0000          0x20000         0x20000

Сохранение параметра, определяющего способ загрузки, в память uboot
Для активации метода загрузки "to Stock"  выполняем команды:

$sudo  fw_setenv "run to_stock"
$sync
$sudo shutdown -P -h now
Firmware (модуль загрузки) ZyXEL NSA будет загружать заводской образ Linux  и монтировать массовый накопитель.

Для активации метода загрузки "to Linux"  выполняем команды:

$fw_setenv arcNumber 4495
$fw_setenv mainlineLinux yes
$fw_setenv bootargs_stock 'console=ttyS0,115200 mtdparts=nand_mtd:0x100000(uboot),0x80000(uboot_env),0x80000(key_store),0x80000(info),0xA00000(etc),0xA00000(kernel_1),0x2FC0000(rootfs1),0xA00000(kernel_2),0x2FC0000(rootfs2) root=/dev/nfs rw init=/init'
$fw_setenv bootargs_linux 'console=ttyS0,115200 mtdparts=nand_mtd:0x100000(uboot),0x80000(uboot_env),0x80000(key_store),0x80000(info),0xA00000(etc),0xA00000(kernel_1),0x2FC0000(rootfs1),0xA00000(kernel_2),0x2FC0000(rootfs2) root=/dev/sda2 rw rootwait loglevel=8'
$fw_setenv bootcmd_linux 'setenv bootargs $(bootargs_linux); ide reset; ext2load ide 0:1 $(loadaddr) /uImage; bootm $(loadaddr)'
$fw_setenv bootcmd_stock 'setenv bootargs $(bootargs_stock); nand read.e $(loadaddr) $(kernel_addr) 0xA00000; bootm $(loadadr)'
$fw_setenv to_stock "setenv mainlineLinux no; setenv bootcmd \'run bootcmd_stock\'; saveenv; reset"
$fw_setenv to_linux "setenv mainlineLinux yes; setenv bootcmd \'run bootcmd_linux\'; saveenv; reset"
$fw_setenv bootcmd 'run to_linux'

$sync
$sudo shutdown -P -h now

Firmware  ZyXEL NSA будет переходить прямо к загрузке образа системы Linux, установленный на внешний массовый накопитель (/dev/sda1).

Ссылки
1 http://dns323.kood.org/start
2 http://gathering.tweakers.net/forum/list_messages/1545544
3 trweb: ZyXEL NSA325 v2 Arch Linux ARM (ALARM) auf interne SATA HDD installieren und booten
4 Open WRT: Das Uboot Environment

четверг, 2 апреля 2015 г.

Run rtorrent as a service


Requirement

Вы хотите сконфигурировать службу  rtorrent в режиме "невидимка" -"daemon", "автостарт".
rtorrent будет отслеживать Ваши запросы (магнитные ссылки, файлы закачки) и качать Вам данные.

Assumptions
Предположим, что программа rtorrent уже установлена, 
работа  оттестирована в интерактивном режиме.

Pre-requisites
Нам потребуется:
  • User "rtorrent" (and /home/rtorrent);
  • Rtorrent configuration (./rtorrent.config, ./rtorrent.session)  (работающая конфигурация rtorrent в /home/rtorrent).

Constraints
Программа rtorrent является интерактивной.
Чтобы отслеживать Ваши запросы, ей необходима находиться в состоянии "активной сессии", осуществляя вывод на экран. Проще говоря: рторрент в активном экране  - рторрент качает. Вышли Вы из сессии Линукс (прекратил выполнение процесс "консоль", связанный с Вашей, к примеру, сессией ssh) - нет больше рторрента, прекратился (вместе с закачками).

Реализация
To force rtorrent, мы будем обманным путём эмулировать сессию rtorrent  с "виртуальным экраном" в режиме "daemon".  Для этого  необходимо выполнить подготовительный сценарий.
Сценарий состоит из двух шагов:
  • Настроить вспомогательную систему - т.н. "мультиплексор терминалов". В нашем примере мы рассмотрим программный мультиплексор tmux;
  • Включить автозагрузку - выгрузку (авторестарт) сессии rtorrent с мультиплексором tmux.

Для этой цели будем работать с systemd (нашим командным интерфейсом будет systemctl).

Работа

Создадим описание сервиса
$sudo nano /usr/lib/systemd/system/rtorrent.service

[Unit]
Description=rTorrent
tmux session
Requires=network.target local-fs.target
[Service]
Type=forking
ExecStart=/usr/bin/tmux new-session -s rt -d rtorrent
ExecStop=/usr/bin/tmux kill-session -t rt
User=rtorrent
KillMode=none
WorkingDirectory=/home/rtorrent/
Restart=on-failure
[Install]
WantedBy=multi-user.target

Тестируем сервис.

$sudo systemctl  start rtorrent.service

$sudo systemctl  is-active rtorrent-service
active

$sudo systemctl status rtorrent.service

$sudo systemctl stop rtorrent.service

Анализируем результат:

Критерии выполнения задачи:
Рторрент запускается (см скриншот) и обслуживает Ваши запросы.

Now promote the service to auto-start!
$sudo systemctl enable rtorrent.service

Перезагружайте системеу, проверьте статус рторрента.
$sudo systemctl status rtorrent.service

 Мы подняли рторрент

Ссылки

1 tmux.sourceforge.net
2 Arch linux systemd
3 Arch linux rtorrent