понедельник, 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

понедельник, 30 марта 2015 г.

NFS version 3 and 4.1 setup for Microsoft Windows 7, Linux and Mac Os X Clients

Настройка NFS (nfs3, nfs41) и подключение клиентов Microsoft Windows 7, Linux, Mac Os X 

 

Concept: "single service" vs. "many services" 


Идея единой службы (vs многие службы), которая "экспортируетресурсы, управляемые файл-серверами и хранилищами, является привлекательной для администратора файл-сервера (хранилища) и приемлемой для пользователей в следующих предположениях: 
  • Администратор избегает управлять технически несовместимыми политиками выделения ресурсов;
  • В прикладной среде (Linux, Windows 7+ Professional, Mac Os X) поддерживается  клиент для этой службы; 
  • Простота и прозрачность  в использовании (например, в Windows - это привязка ресурса к "буковке", "Y:"); 
  • 100% локализация: клиенты  работают  с русскими именами файлов (поддержка UTF-8) [1]; 
  • Сервер корректно отрабатыает запросы типа "создать копию папки", не направляя перекачку данных по сети "через клиентский буфер"; 
  • Сервис шустро работает, масштабируем. Процессор оптимально загружен; 
В средах Windows лучшим выбором такой "единой службы" является Microsoft Windows networking (SMB). Наилучшим выбором является Windows Server в качестве домен-контроллера, с поддержкой Active Directory. В смешанных (Mac Os X, Windows 7+, Windows XP, Linux) средах наилучшего выбора нет
Коммерческая платформа Windows Server 2012 (см. рисунок) и open source Arch Linux позволяют настроить службы SMB, NFS или обе службы одновременно. 

В данном упражнении рассмотрим настройку NFS в смешанной среде: Arch Linux, Mac Os X Yosemite, Windows 7, Windows Vista. 

 

Constraints 



  • Mac Os X поддерживает NFS. Клиент работает с по протоколу nfs3, используя "непривилегированные" (>1024) порты  и не поддерживает nfs4. Поддерживается трансляция национальных кодировок;
  • Windows Vista и 7 версий Ultimate и Enterprise (не professional!) имеет "службы подключения к NFS". Службы не установлены по умолчанию. Эти службы работают по протоколу nfs3, используя "непривилегированные" (>1024) порты,  не поддерживает nfs4,  не поддерживают UTF-8 [1]; 
  •  Windows 7 версий Professional  NFS Version 4 Open Source Reference Implementation(ms-nfs41-client-x64)  не понимает nfs3  [5]; 
  • Сервер Arch Linux может экспортировать ресурсы в соответствии со спецификациями nfs3 и nfs4 для разных клиентов.  
В данном примере рассматриваем простейшие работающие в средах Linux, Mac Os X и Windows 7 примеры конфигурации сервера и клиента учитывающие вышеуказанные constraints. 
  • Не рассматриваются: Kerberos, схемы identity (uid и gid) mapping между Windows и Linux, интеграция со информационными службами каталогов как-то (open)ldap, NIS, ActiveDirectory. 
  • Скажу забегая вперёд: "Захоти что-то из п. 1- косяки вылезут".

Установка и конфигурация службы NFS 


1) На сервере (используем Arch Linux Arm) установим nfs-utils: 

$sudo pacman -S nfs-utils 

2) Экспортируем по протоколу NFS существующие (и отстроенные в плане прав доступа) файловые системы.
Конфигурации выделены синим.  
Внимание. 
Есть "волшебные" опции;
Предлагаю уяснить применение каждой из них в процессе самозадрачиванияподготовки.  

$sudo nano /etc/exports  
# /etc/exports - exports(5) - directories exported to NFS clients 
# 
# Example for NFSv2 and NFSv3: (works for Linux, Windows Vista Ultimate and Mac Os X) 
/srv/home        192.168.1.0/24(rw,sync,insecure) 

# Example for NFSv4 (works for Linux and Windows 7 ms-nfs41-client-x64): 
/srv/nfs4 192.168.1.0/24(sec=sys,rw,sync,fsid=0,insecure) 

# Use `exportfs -arv` to reload. 

3) Перезагрузим службу NFS: 

$ sudo exportfs -arv 

 

Тестирование подключения Mac Os X к  службе NFS 

1) Командуем монтировать /srv/home, экспортируемую по протоколу nfs3: 

medv-MBP-3:~ medv$ sudo mkdir /private/nfs2 
medv-MBP-3:~ medv$ sudo mount -t nfs -o resvport 192.168.1.3:/srv/home /private/nfs2 
medv-MBP-3:~ medv$

2) Ресурс "/srv/home" смонтирован на "/private/nfs2" -> Тест passed 

Тестирование подключения клиента Windows 7 NFS Version 4 Open Source Reference Implementation к службе NFS 


1) Скачиваем NFS Version 4 Open Source Reference Implementation (клиент Windows) [2] и устанавливаем, как описывает методичка [3]; 

2) После успешной установки клиента в каталог "С:\Users\Public\ms-nfs41-client-x64 
командуем подключить /srv/nfs4,  экспортируемую по протоколу nfs4, к буковке "Y:" 

Внимание
/srv/nfs4 экспортируется с параметром fsid=0 (то есть как "/"). 
Поэтому Windows NFS Version 4 клиент будет отсчитывать путь как "192.168.1.3:/",  не находя путь, заданный в формате "192.168.1.3:/srv/nfs4". 

Microsoft Windows [Version 6.1.7601] 
Copyright (c) 2009 Microsoft Corporation.  All rights reserved. 

C:\Windows\system32>net start "pnfs client" 
The requested service has already been started. 

More help is available by typing NET HELPMSG 2182. 


C:\Windows\system32>cd c:\Users\Public\ms-nfs41-client-x64 

c:\Users\Public\ms-nfs41-client-x64>nfs_mount.exe Y: 192.168.1.3:/ 
Successfully mounted 192.168.1.3 to drive Y: 

c:\Users\Public\ms-nfs41-client-x64>Y: 

Y:\>dir /w 
 Volume in drive Y is PnfsVolume 
 Volume Serial Number is BABA-FACE 

 Directory of Y:\ 

[.]                   [video]               [etc] 
rootfs.tgz            usb_key_func.sh.2     ._rootfs.tgz 
._usb_key_func.sh.2   rootfs.tar.gz 
               5 File(s)    763.416.187 bytes 
               3 Dir(s)  110.300.561.408 bytes free 

Y:\> 
3) Ресурс "/srv/nfs4" подключен к буковке Y: -> Test passed 

 

Публикации 


  1. Zhang Weiwu "There is no solution with Microsoft's NFS client in Windows 7"  http://superuser.com/ 
  2.  University of Michigan Projects: NFSv4.1 Client for Windows  
  3.  University of Michigan Windows NFS 4.1 Client Instructions