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

Настройка Принт-сервера на примере TL-WR842ND и HP LJ 1020 с использованием p910nd

Настройка Принт-сервера на примере TL-WR842ND и HP LJ 1020 с использованием p910nd

Версия прошивки OpenWrt: OpenWrt Attitude Adjustment 12.09-rc1 / LuCI 0.11 Branch (0.11+svn9425)
Устанавливаем необходимые для работы принт-сервера пакеты и редактор nano, для комфортного редактирования файлов конфигурации
opkg update
opkg install kmod-usb-printer usbutils p910nd nano
Многие принтеры от Hewlett Packard для печати требуют особый набор команд (прошивку), которые необходимо загружать до начала печати. Всем известный Олег, выложил некоторые прошивки на своем сайте. Посмотреть названия файлов можно по ссылке http://oleg.wl500g.info/hplj Нам нужен драйвер от HP 1020 - выбираем sihp1020.dl (А для МФУ hp M1005, например нужен sihp1005.dl) Переходим в каталог, где будем хранить прошивку и загружаем ее
cd /usr/lib/
wget http://oleg.wl500g.info/hplj/sihp1020.dl
Для того чтобы загрузка прошивки происходила автоматически, при каждом подключении принтера создадим файл
nano /etc/hotplug.d/usb/20-printer
В который добавим следующую информацию
#!/bin/sh
FIRMWARE="/usr/lib/sihp1020.dl"
DEVICE=/dev/usb/lp0
LOGFILE=/var/log/printer
if [ "$PRODUCT" = "3f0/2b17/100" -a "$ACTION" = "add" ]
then
      for i in $(seq 30); do
              if [ -c $DEVICE ]; then
                      echo "$(date) : Sending firmware to printer." > $LOGFILE
                      cat $FIRMWARE > $DEVICE
                      echo "$(date) : done." >> $LOGFILE
                      exit
              fi
              sleep 1
      done
fi
Обратите внимание на запись 3f0/2b17 - это VID и PID принтера HP LJ 1020 (Первые нули удаляются 03f0). У другой модели, они будут другие. Узнать можно например из панели управления в Windows ну или подключив принтер к роутеру и набрав команду:
lsusb -v | grep ID
Откуда и получите эти данные:
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 03f0:3b17 Hewlett-Packard LaserJet M1005 MFP
Следующие две команды найдены на польском форуме, истинное значение мне пока не ясно. У меня пару раз без них не работало :-)
uci set p910nd.@p910nd[0].enabled=1
uci commit p910nd
Открываем файл конфигурации p910nd
nano /etc/config/p910nd
где меняем один параметр - вместо /dev/lp0 пишем /dev/usb/lp0
config p910nd
      option device        /dev/usb/lp0
      option port          0   
      option bidirectional 1
      option enabled       1
Открываем в файрволе доступ к принтеру из сети по порту 9100, для этого редактирум файл конфигурации файрвола
nano /etc/config/firewall
В самый конец дописываем следующие строки
# Allow printer                            
config rule                                
      option src lan                     
      option proto tcp                   
      option dest_port 9100              
      option target ACCEPT
Настройка почти закончена… Осталось только включить демона принт-сервера в автозагрузку и перезагрузить роутер
/etc/init.d/p910nd enable
reboot

пятница, 25 октября 2013 г.

Добавляем swap в Linux

Добавляем swap в Linux

Tuesday, June 3rd, 2008
Вообще-то сервак свопить не должен, иначе это уже не сервак, а хз что. Но бывает и не сервак, да и мало ли вдруг надо добавить свопа, всенепременно. Ну чтож добавим:
Создаем файл, в данном примере 2Gb:
# dd if=/dev/zero of=/swapfile bs=1024 count=2097152
Далее форматируем его:
# mkswap /swapfile
И добавляем:
# swapon /swapfile
После чего можем увидеть своп в списке /proc/swap. Обратная процедура также несложна:
# swapoff /swapfile


http://root.blogz.name/tag/swapon/

понедельник, 21 октября 2013 г.

OpenWRT — сборка из исходников прошивки

Написал Денис Юрьев в 05.10.2013
Во-первых меня уже долгое время напрягал тот факт, что доступно уже давно ядро версии 3.*, а в dd-wrt для моего устройства (Dlink DIR-320) до сих пор ядро версии 2.4.
Во-вторых вытекает сразу из первого — кривая поддержка ntfs, до сих пор ничего не ясно с поддержкой ext4 ну и еще куча всего странного и непонятного
В-третьих недавно я Вам рассказал про модуль для ядра Linux — zRam, загорелся таким вот способом несколько решить проблему с нехваткой оперативной памяти в DD-WRT и как думаете что произошло? Конечно же, для DD-WRT этого модуля в принципе не существует.
UPD 05.10.2013: с момента написания статьи изменилась немного логика первых этапов сборки прошивки. Внес необходимые изменения, исправил недочеты.

Порывшись в инете я узнал, что в OpenWRT уже есть возможность использовать zRam, собрать прошивку для Dlink DIR320 с ядром третьей версии.
Возможно просто всё это не документировано касательно DD-WRT, но изобретать велосипед у меня времени особо нет. Воспользуюсь доступной в обилии на многих языках документацией по OpenWRT и соберу себе ту прошивку, которая нужна конкретно мне.

Сборка OpenWRT

Для сборки первым делом понадобится операционная система семейства Linux. В моем случае это Ubuntu Linux 13.04 64bit.

Подготовка к установке — получение исходных кодов OpenWRT и необходимых пакетов

Итак, приступим.
1. Устанавливаем Subversion
denis@denis-pc:~$ sudo apt-get install subversion
2. Так же в ходе получения исходников пакетов и патчей нам понадобится пакет git
denis@denis-pc:~$ sudo apt-get install git
3. Получаем исходники OpenWRT
Стабильная версия с версией ядра 2.6.*:
denis@denis-pc:~$ svn co svn://svn.openwrt.org/openwrt/branches/backfire openwrt
Стабильная версия с версией ядра 3.*
denis@denis-pc:~$ svn co svn://svn.openwrt.org/openwrt/branches/attitude_adjustment openwrt
Тестовая версия:
denis@denis-pc:~$ svn co svn://svn.openwrt.org/openwrt/trunk/ openwrt
Я выбрал последний вариант, так как там доступен модуль zRam
Получив исходники, переходим в каталог, где они лежат:
cd ~/openwrt
4. Теперь надо еще получить пакеты и патчи, доступные для сборки:
./scripts/feeds update -a
./scripts/feeds install -a
5. Доустанавливаем необходимые для сборки пакеты. Для этого проверяем чего еще не хватает:
make prereq
Collecting package info: done
Checking 'working-make'... ok.
Checking 'case-sensitive-fs'... ok.
Checking 'getopt'... ok.
Checking 'fileutils'... ok.
Checking 'working-gcc'... ok.
Checking 'working-g++'... failed.
Checking 'ncurses'... failed.
Checking 'zlib'... failed.
Checking 'gawk'... failed.
Checking 'unzip'... ok.
Checking 'bzip2'... ok.
Checking 'perl'... ok.
Checking '/usr/bin/python2.7'... ok.
Checking 'wget'... ok.
Checking 'git'... ok.
Checking 'gnutar'... ok.
Checking 'svn'... ok.
Checking 'gnu-find'... ok.
Checking 'getopt-extended'... ok.
Checking 'non-root'... ok.
В моем случае:
sudo apt-get install g++ libncurses5-dev zlib1g-dev gawk
Примечание: очень часто неопытные пользователи при компиляции не могут найти откуда устанавливать пакет ncurses (ncurses-devncurses-devel и т.д.), который требует команда make — решение проблемы в установке пакета libncurses5-dev
6. Если всё необходимое установлено, то мы увидим следующую картину:
конфигурирование пакетов и модулей ядра OpenWRT
Псевдографическое меню конфигурирование пакетов и модулей ядра прошивки OpenWRT
Примечание: в данном конфигураторе сборки прошивки используются стандартные для linux-систем условные обозначения:
< > — отключено
<M> — включено, компиляция модулем. (В случае OpenWRT — отдельным *.ipk — файлов, для доустановки после прошивки)
<*> — включено, пакет будет «запакован» в прошивку
Первым делом указываем тип процессора.
У DLink DIR-320 rev. A1 это Broadcom BCM5354KFBG, он же BCM95354
Итак открываем TargetSystem и там выбираем Broadcom BCM947xx/953xx.
Выбор типа процессора при сборке OpenWRT
Выбираем тип процессора при сборке OpenWRT — Broadcom BCM947xx/953xx
7. Компиляция пакетов для сборки прошивки.
Это пункт необязательный, но настаиваю на его выполнении.
Дело в том, что если вы пропустите сборку пакетов для компиляции прошивки OpenWRT, то она произойдет при первой компиляции самой прошивки.
Однако потом будет труднее выявить ошибку — что не хочет собираться, инструменты для компиляции или сама прошивка.
Внимание: чтобы потом не пересобирать эти инструменты — убедитесь, что в предыдущем пункте правильно выбрали тип процессора устройства.
make tools/install && make toolchain/install
Команда выполняется достаточно долго, есть время попить чай или прибраться в комнате:-D

Настройка пакетов и модулей ядра OpenWRT

Выполним команду:
make menuconfig
В итоге в терминале вы увидите снова псевдографическое меню для настройки сборки OpenWRT с уже выбранным процессором.
Теперь выбираем профиль Target Profile и там выбираем Broadcom SoC, b44 Ethernet, BCM43xx WiFi (b43, default) — это позволит сэкономить пару десятков килобайт в размере нашей будущей прошивки, исключив ненужные драйвера ethernet-контролеров.
сборка OpenWRT - выбор профиля
Выбираем профиль для нашего устройства DLink DIR-320 rev. A1/A2 — 
Broadcom SoC, b44 Ethernet, BCM43xx WiFi (b43, default)
Теперь подключаем модули ядра.
Для этого открываем пункт в главном меню Kernel modules
Выбор модулей для OpenWRT
Выбираем пункт Kernel Modules в главном меню конфигурации сборки прошивки OpenWRT
Для начала надо настроить модуль поддержки WiFi нашего устройства — kmod-b43
Для этого выбираем пункт Wireless Drivers
Настройка параметров драйверов wireless при сборке openwrt
Выбор пункта Wireless Drivers
В открывшемся меню отключаем ненужный в нашем случае модуль kmod-b43legacy и переходим к настройке модуля kmod-b43
настройка модуля kmod-b43
Отключаем модуль kmod-b43legancy и переходим к настройке модуля kmod-b43
Отключим ненужный функционал модуля kmod-b43, чтобы сэкономить несколько сотен килобайт, что позволит включить в прошивку веб-интерфейс.
Для этого выпоняем следующие действия:
Значение параметра Core revisions to include выставляем равным 13
Значение параметра PHY types to include выставляем равным LP
Отключаем пункты Enable support for PIO transfer modeEnable support for N-PHYs,Enable support for HT-PHYs.
В итоге должна получиться примерно следующая картина:
настройка kmod-b43 openwrt
Настройка модуля kmod-b43 для маршрутизатора DLink DIR-320 rev. A1/A2
Теперь выбираем раздел USB support для подключения поддержки USB-устройств
Выбор модулей ядра OpenWRT, отвечающих за поддержку USB-устройств
Выбираем раздел USB support для выбора модулей ядра OpenWRT, отвечающих за поддержку USB-устройств
Я буду подключать только внешний USB-диск, для этого я выбираю
kmod-usb-core — поддержка спецификации USB ядром
kmod-usb-brcm47xx — поддержка USB-устройств процессором маршрутизатора
kmod-usb2 — поддержка USB версии 2.0
kmod-ohci — поддержка USB-хабов
kmod-usb-storage — поддержка USB-дисков
Выбираем необходимые нам модули ядра OpenWRT
Выбираем необходимые нам модули ядра OpenWRT для поддержки USB-носителей
Подключим нужные нам модули поддержки файловых систем.
В списке категорий подключаемых модулей ядра выберем раздел Filesystems
OpenWRT подключение поддержки файловых систем
Подключение поддержки файловых систем в OpenWRT
И выберем модуль ядра kmod-fs-ext4. Этот модуль обеспечит поддержку файловых систем ext2ext3 и ext4. Его необходимо выбрать, если планируете устанавливатьSamba-сервер или торрент-клиент Transmission, ну или любые пакеты.
Так же, если вам критична поддержка других файловых систем, то вы можете выбратьkmod-fs-ntfs для поддержки NTFS или kmod-fs-vfat для поддержки файловой системыFAT32.
Включение поддержки ext2, ext3, ext4 в OpenWRT
Включение модуля ядра kmod-fs-ext4 для поддержки файловых систем ext2ext3 и ext4 вOpenWRT
Теперь настало время подключить поддержку zRam.
Напомню, этот модуль я хочу использовать для экономии оперативной памяти маршрутизатора путем монтирования в виртуальное сжатое блочное устройство раздела подкачки swap.
Для автоматизации этого процесса в OpenWRT уже есть готовый скрипт zram-swap. Включив его в состав прошивки вы автоматизируете весь этот процесс.
Для этого выбираем в главном меню конфигуратора прошивки пункт Base system
Подключение базовых элементов прошивки OpenWRT
Выбираем пункт Base system в главном меню конфигурации сборки прошивки OpenWRT
И в конце открывшегося списка отмечаем для установки zram-swap
Включаем в состав прошивки OpenWRT поддержку zRam и скрипт для монтирования раздела подкачки в zRam
Выбираем компонент zram-swap
Скорее всего это лишь частично решит проблему с нехваткой памяти, так что без раздела подкачки на внешнем устройстве нам не обойтись. Но для этого необходимо будет монтировать его с пониженным приоритетом, чтобы маршрутизатор старался использовать максимально swap в виртуальном устройстве zram
Для этого нам необходимо не забыть включить подключение раздела подкачки с указанием приоритета.
Там же в Base system ищем пакет busybox и выбираем его нажатием клавишей Enter:
OpenWRT - пакет busybox
Выбор пакета Busybox
Откроется конфигурация пакета busybox, котором выберем раздел Linux System Utilities
OpenWRT - linux system utilities
Выбираем категорию Linux System Utilities
и в нём включим поддержку swaponoff, а так же приоритет для разделов подкачкиSupport priority option -p
OpenWRT swapon swapoff
Включаем поддержку команд swapon и swapoff и приоритет разделов подкачки
Для удобного монтирования разделов на подключаемых носителях нам так же понадобится пакет block-mount, который можно включить в состав нашей будущей прошивки в всё том же разделе Base system
Включение пакета block-mount в состав прошивки openwrt
Включаем пакет block-mount в состав прошивки OpenWRT
Теперь остается подключить web-интерфейс LuCI. Сразу же скажу, что данный веб-интерфейс намного лучше продуман разработчиками, нежели веб-интерфейс DD-WRT.
Итак, возвращаемся в главное меню конфигуратора OpenWRT и выбираем пункт LuCI
Включение web-интерфейса LuCI в прошивку OpenWRT
Включаем web-интерфейса LuCI в прошивку OpenWRT
Выбираем первый пункт Collections и в открывшемся меню выбираем luci
luci в прошивке openwrt
luci в прошивке openwrtВключаем основную часть web-интерфейса LuCI в состав прошивки OpenWRT
Если Вы испытываете проблемы с английским языком, или же просто хотите видеть родной язык в Web-интерфейсе, тогда выбирайте пятый пункт в настройках пакета LuCI— Translations
Там вы сможете выбрать как русский (luci-i18n-russian), так и украинский (luci-i18n-ukrainian) языки
выбор русской локали в веб-интерфейсе openwrt
выбор русской локали в веб-интерфейсе openwrtДобавление русской локализации для веб-интерфейса LuCI
На этом конфигурацию прошивки можно закончить. Выходим из конфигуратора, соглашаемся с предложением сохранить новую конфигурацию.

Компиляция прошивки OpenWRT

Приступаем к самой сборке
make -j4 V=s
Параметр -j4 указывает во сколько потоков выполнять сборку для ускорения процесса. Укажите на один поток больше, чем количество ядер вашего процессора. Если же у вас процессор с поддержкой Hyper-threading, то укажите равное количеству виртуальных ядер (потоков).
Готовый файл прошивки будет носить имя openwrt-brcm47xx-squashfs.trx и найдете его в папке bin в каталоге с исходниками прошивки
Процесс компиляции исходников занимает, в зависимости от вычислительных способностей вашего компьютера, от 20 минут до нескольких часов.

Устанавливаем на DIR-320 прошивку OpenWRT

В итоге в каталоге с исходниками появится папка bin/brcm47xx (если вы собирали для маршрутизатора с процессором серии brcm47xx)
В папке будет куча готовых прошивок. Для DIR-320 файл прошивки называется openwrt-brcm47xx-squashfs.trx
Если Вы ранее не пользовались альтернативными прошивками и впервые будете прошивать своё устройство, то процесс точно такой же, как установка прошивки DD-WRT на DIR-320.
Если же у Вас уже установлена прошивка DD-WRT, то можете смело обновляться через веб-интерфейс, только не забудьте указать, что необходимо сбросить настройки на заводские.

Первый взгляд на OpenWRT

Как только все установится по адресу 192.168.1.1 будет доступен веб-интерфейсOpenWRT LuCI, который сразу же предложит установить пароль пользователю root. Указываем пароль, и перед нами во всей своей красе предстает веб-интерфейс. Вот небольшой его кусок.
Веб-интерфейс LuCI OpenWRT
Главная страница web-интерфейса LuCI прошивки OpenWRT
Как Вы можете заметить, файл подкачки в zram сразу же подхватился и его объем равен половине памяти устройства. Ну что ж, цель достигнута.

PS

Статью я эту писал параллельно с экспериментами не менее недели. Главной проблемой был ограниченный объем энергонезависимой памяти устройства и желание запихать необходимый минимум «инструментов» в те самые 3.69 Mb, доступные для прошивки. Моя прошивка в итоге имеет объем 3.63 Mb. И это еще при оставленной поддержки ipv6, выпиливать которую не так и сложно, но рассмотрю этот момент в следующей статье.
В следующих статьях рассмотрю возможности новой для меня прошивки и протестирую, дает ли пользу использование zRam.
Оставайтесь на связи.