Создание PXE загрузчика на любом носителе

Когда нет под рукой сетевой платы с загрузчиком PXE или нужно загрузиться по сети, а в BIOS не предусмотренно такой возможности на помощь приходит проект gPXE.

gPXE - это open source реализация сетевого загрузчика поддерживающая большое количество сетевых плат, без необходимости размещения загрузчика в ПЗУ. Т.е. для сетевой загрузки нам потребуется сетевая плата, дискета(USB flash, CD диск и т.п.) и образ загрузчика с сайта автоматического создания образов. Для любителей сбора образов из исходников смотреть тут.

!!! По умолчанию подключаются все известные модели сетевых плат, поэтому для уменьшения размера образа можно выбрать только используемую(мые) модели

Создание PXE загрузочной дискеты

Загрузить образ с сайта автоматического создания образов с расширением *.dsk* или собрать из исходного кода командой make bin/gpxe.dsk

Записать образ на дискету dd if=bin/gpxe.dsk of=/dev/fd0 или cat bin/gpxe.dsk > /dev/fd0

Создание PXE загрузочного диска

Загрузить образ с сайта автоматического создания образов с расширением *.iso* или собрать из исходного кода командой make bin/gpxe.iso

Записать образ на диск dd if=bin/gpxe.iso of=/dev/cdrom или воспользоваться программой записи дисков.

Создание PXE загрузочной флешки

Загрузить образ с сайта автоматического создания образов с расширением *.usb или собрать из исходного кода командой make bin/gpxe.usb

Записать образ на флешку dd if=bin/gpxe.usb of=/dev/sdX

Вместо /dev/sdX необходимо указать флешку и главное не спутать с жестким диском. :-)

!!! Путь bin/gpxe.x может отличаться истинного расположения, поэтому необходимо подставить свое местоположение образа

Статья подготовлена на основе вики-статьи с сайта etherboot.org

2009-12-03

UTF8 локаль в ArchLinux

Дизель выложил в свое время замечательную ссылочку на форуме по поднятию UTF8 локали в Arch Linux

Здесь я хочу что бы все желающие выдавали свои дополнения, оформенные в виде статьи.

Итак, положим начало...

→ Читать дальше...

2009-12-03

Небольшое облегчение жизни с инфракрасником Tekram 410w

Сделано с помощью udev.

→ Читать дальше...

2009-12-03

Настройка принтера Samsung ML-1520P

!!! Этот принтер больше не поддерживается Samsung, соответственно драйвера они больше для него не пишут. Более того, у них на сайте их тоже уже нет. На свой страх и риск выкладываю тут. Описание настройки закрытого драйвера оставлено в исторических целях.

Открытый драйвер samsung GDI

Встренный в ghostscript. На странице принтера отмечен как рекомендуемый.

Проверить наличие можно так:

$ gs --help | grep samsunggdi
psrgb pswrite pxlcolor pxlmono r4081 rinkj rpdl **samsunggdi** sgirgb sj48

Далее установка происходит следущим образом, рассказ для CUPS и для ArchLinux.

  • Заходим сюда, выбираем принтер ML-1520, ставим чекбокс в download и нажимаем кнопку Generate PPD file, сохраняем файл себе на жесткий диск, имя: Samsung-ML-1520-gdi.ppd
  • Для работы нужен фильтр foomatic-rip, находится в пакете foomatic-filters, ставим его: pacman -S foomatic-filters у кого нет такого пакета, посмотрите сайт на предмет наличия.
  • Запускаем браузер (CUPS думаю у вас уже запущен), заоходим на http://localhost:631 и далее:
  • Идем в Manage printers и удаляем принтер со старыми драйверами
  • Идем в Add printer:
    • Name: любое, пусть будет ml1520
    • Location: "моя комната" или "мой кабинет" или "далеко далеко далече"
    • Description: описание принтера
  • Нажимаем Continue, попадаем в "Device for ml1520"
    • Выбираем Device, у меня принтер на паралельном порту (он может работать и через USB), поэтому устройство выглядит так: "Samsung ML-1520P LPT #1"
  • Нажимаем Continue, попадаем в "Model/Driver for ml1520"
    • В Provide a PPD file выбираем наш сохраненный Samsung-ML-1520-gdi.ppd
  • Нажимаем Add Printer. Принтер добавлен
  • Переходим опять в Manage Printers, устанавливаем опции печати, в частности формат листа A4, можно проверить печать, напечатав пробую страницу.

Открытый драйвера splix

Есть так же в репозитарии ArchLinux, или качается с http://splix.ap2c.org, там же смотрится список поддерживаемых принтеров. Драйвер отмечен как: "This driver contains algorithms which are (possibly) patented (See license text)".

  • Ставим pacman -S splix
  • Перестартуем CUPS после: /etc/rc.d/cups restart
  • Все шаги проделываются аналогично установке samsunggdi, за исключением установки foomatic-filters и в списке принтеров вместо указания PPD, он выбирается из списка: "Samsung ML-1520, SpliX V. 2.0.0 (en)"

Закрытый драйвер

С закрытыми драйверами бывает очень много разного необычного и загадочного, вот и с принтером ML-1520 не все получилось гладко. Основная проблема в том, что когда стояла старая Slackware 9.1 этот принтер завелся с полуоборота на с теми дровами что были с ним на диске. После обновления до Slackware 9.1 он работать наотрез отказался, такое же поведение наблюдалось и на свеженьком Arch Linux 0.7.1. Все дело было в том что фильтр из состава драйвера валился в сигфолт, думается из-за несоответствия версии glibc в системе и glibc с которой был скомпилирован фильтр. Обновление драйверов с официального сайта samsung.com (не берите драйвера с samsung.ru, там таааакое старье!) тоже не помогло...

Так и стоял этот принтер без работы почти все лето...

Ну вот подумав, что, возможно, драйвера еще раз обновили и решили эти проблемы, опять полез на samsung.com. И надо же, действительно, обновление было ;) Скрестив пальчики поставил на закачку (14 метров по gprs это да...). После окончания скачивания мы имеем архив:

20060710181110812_UnifiedLinuxDriver.tar.gz

распаковываем его:

tar xzf 20060710181110812_UnifiedLinuxDriver.tar.gz

Переходим в каталог:

cd cdroot

Смотрим на заманчивый файл autorun и еще более заманчивый Linux/install.sh и... нет не угадали, нифига мы их не запускаем. Попробую объяснить почему, в двух словах:

После инсталляции стандартным путем, принтер нафиг отказывается работать! почему - хз, как настраивать - хз. (ну точнее не полностью непонятно, но объяснять то что у самого в голове сумбурно - бред)

Далее идем по инструкции (делаем от рута):

  • Создаем каталог: mkdir -p /opt/Samsung/mfp
  • Копируем все из Linux/i386/at_opt в вышеуказанный каталог (вместо i386 может быть x86_64): cp -r Linux/i386/at_opt /opt/Samsung/mfp/
  • Копируем все из Linux/i386/at_root cp -r Linux/i386/at_root /opt/Samsung/
  • Делаем симлинки:

    ln -s /opt/Samsung/usr/lib/cups/backend/* /usr/lib/cups/backend ln -s /opt/Samsung/usr/lib/cups/filter/* /usr/lib/cups/filter ln -s /opt/Samsung/usr/lib/sane/* /usr/lib/sane ln -s /opt/Samsung/usr/lib/libmfp.so.1.0.1 /usr/lib/

  • Копируем qt библиотеку с которой собрана конфигурационная морда и создаем линк:

    cp Linux/i386/lib/libqt-mt.so.3 /opt/Samsung/usr/lib ln -s /opt/Samsung/usr/lib/libqt-mt.so.3 /usr/lib

  • Копируем все из noarch/at_opt/share в /opt/Samsung/mfp/share cp -r noarch/at_opt/share/* /opt/Samsung/mfp/share

  • Копируем noarch/at_root cp -r noarch/at_root/* /opt/Samsung/
  • Делаем линк ln -s /opt/Samsung/etc/sane.d/* /etc/sane.d/\ (7-8 пункты не имеют к настройке принтера никакого отношения но могут быть полезны при настройке комбайнов и сканеров от самсунга)
  • Пройдитесь ldd по фильтрам и вообще всем бинарникам:

    ldd /opt/Samsung/mfp/bin/* ldd /opt/Samsung/usr/lib/cups/backend/* ldd /opt/Samsung/usr/lib/cups/filter/*

Если не найдены библиотеки типа libstdc++ попробовать сначала доставить из дистрибутива или из noarch/

  • Скопировать OEM.ini cp Linux/OEM.ini /opt/Samsung/mfp/share/
  • Остановить cups: /etc/rc.d/cups stop
  • Отредактировать /etc/cups/printers.conf

    Info Location DeviceURI parallel:/dev/lp0 State Idle Accepting Yes JobSheets none none QuotaPeriod 0 PageLimit 0 KLimit 0

  • Скопировать ML-1520spl2.ppd: cp /opt/Samsung/mfp/share/ppd/ML-1520spl2.ppd /etc/cups/ppd/ml1520.ppd

  • Запустить cups /etc/rc.d/cups start
  • Запустить программу конфигурации ``/opt/Samsung/mfp/bin/Configurator
  • Настроить свой принтер

Все, после этого все должно работать, возможно сделаю спек для утилиты makepkg из состава ArchLinux что бы автоматизировать этот процесс

Alexander 'Hatred' Drozdoff, Vladivostok, 2006.08.22, updated: 2009.03.31

2009-12-03

Доступ в интернет через связку Linux+Bluetooth+Mobile+GPRS на примере Arch Linux

В этом руководстве без лишних слов и очень кратко описывается весь процесс настройки USB Bluetooth адаптера и ppp соединения для доступа в интернет через мобильный телефон.

В качестве примера приведены настройки для двух операторов сотовой связи Приморья: НТК и МегаФон Дальний Восток.

Для начала давайте разберемся, что мы будем делать и для чего нам это нужно. Наша конечная цель - заставить работать связку Linux+Bluetooth+Mobile+GPRS. То есть первое, что нам нужно:

  • Заставить работать Bluetooth адаптер (в этом руководстве речь пойдет о USB адаптерах).
  • Настроить соединение между телефоном и компьютером посредством bluetooth. Будем использовать стек Bluez.
  • Настроить соответствующим образом pppd.
  • Ура! Работает! Или не работает...

Ну, а теперь обо всем по порядку.

Настройка ядра

Я настраивал адаптер Tekram TM-304. Для того, чтоб заставить эту штуку работать, сначала скомпилируем некоторые модули ядра.

Если вы используете make menuconfig для конфигурирования ядра, то вот как нужно расставить флажки:

Networking support
  Bluetooth subsystem support  --->
    <M>   L2CAP protocol support
    < >   SCO links support
    <M>   RFCOMM protocol support
    [*]   RFCOMM TTY support
    < >   BNEP protocol support
    <M>   HIDP protocol support
  Bluetooth device drivers  --->
    <M> HCI USB driver

Ну а если вы используете make config или решили вручную включить нужные опции в конфиге ядра (обычно это файл /ust/src/linux/.config), то вот они:

CONFIG_BT=m
CONFIG_BT_L2CAP=m
CONFIG_BT_RFCOMM=m
CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_HIDP=m
CONFIG_BT_HCIUSB=m

Все. Можно собирать модули. Не забудьте позаботиться о загрузке необходимых модулей при каждой перезагрузке (если udev не настроен должным образом).

Если у вас нет желания возиться с модулями или религия не позволяет их использовать, можете собрать ядро монолитно. Должно работать. Не проверял.

А сейчас подгрузим эти модули вручную, так как перезагружаться для этого нам лень.

$ modprobe bluetooth

По зависимостям он должен автоматически потянуть модули: rfcomm, hidp, l2cap, hci_usb. Если этого не произошло, то грузим их все по порядку, а в самую последнюю очередь модуль bluetooth.

Переходим к настройке стека bluetooth и сопутствующих утилит

Ставим необходимый набор утилит для работы с bluetooth стеком Bluez. Через зависимости тянется пакет bluez-libs. $ pacman -S bluez-utils

Запускаем всю bluetooth подсистему: $ /etc/rc.d/bluetooth start Сразу не забываем добавить автоматический запуск этого скрипта при загрузке системы. Для этого в файле /etc/rc.conf в переменную DEAMONS добавляем соответствующую запись.

Проверяем, что в телефоне включен bluetooth и что он виден всем.

Теперь попытаемся найти все bluetooth устройства, находящихся в зоне досигаемости нашего bluetooth адаптера. $ hcitool scan Запомните (шутка) запишите адрес bluetooth адаптера, соответствующий вашему телефону.

В файле /etc/rfcomm.conf в параметре device указываем адрес нашего телефона. И не забываем установить значение параметра "bind" в "yes"! Иначе не будет автоматически создан файл устройства /dev/rfcomm0 и его созданием придется заморачиваться отдельно.

В файле /etc/hcid.conf в качестве параметра pin_helper указываем /usr/bin/simplepin. Разбираться с навороченым bluezpin, который идет в комплекте, да еще и написан на питоне, совсем не охота. Мы напишем скрипт немного проще:

/usr/bin/simplepin:

#!/bin/sh
echo "PIN:1234"

Вот и весь скрипт.

Перезапускаем всю bluetooth подсистему:

$ /etc/rc.d/bluetooth stop
$ /etc/rc.d/bluetooth start

Теперь можно проверить, работает ли у нас bluetooth соединение. Для этого установим соединение: $ hcitool cc <адрес bluetooth адаптера вашего телефона>

Если все прошло гладко, то команда $ hcitool con должна выдать информацию об установленном соединении.

Теперь попробуем отправить запрос на аутентификацию: $ hcitool auth <адрес bluetooth адаптера вашего телефона>

После выполнения этой команды телефон должен у вас спросить PIN. Вводим то, что вы указали в скрипте simplepine. В нашем случае 1234. Если все прошло гладко, то соединение будет установлено и в списке активных устройств вашего телефона должна появиться соответствующая запись.

Для удобства использования я добавил в своем телефоне адрес bluetooth адаптера компьютера в список сопряженных устройств и разрешил этому устройству подключаться автоматически. После этого можно включить скрытый режим в параметрах bluetooth и больше не вводить pin-код при каждом подключении.

Переходим к настройке ppp соединения

Вот здесь есть, где напороть косяков и потом долго догадываться: почему у меня все правильно, но нифига не работает.

Содержимое файла /etc/ppp/peers/ntc-gprs:

lcp-echo-failure 0
lcp-echo-interval 0
connect /etc/ppp/peers/ntc-gprs-connect-chat
/dev/rfcomm0
115200
crtscts
local
noipdefault
ipcp-accept-local
defaultroute
#replacedefaultroute
usepeerdns
novj
nobsdcomp
novjccomp
nopcomp
noaccomp
noauth
mtu 1400

Здесь стоит обратить внимание на последнюю строку: "mtu 1400". По умолчанию значение параметра mtu (Maximum Transfer Unit) равно 1500. А у нашего провайдера максимальный размер пакета ограничен цифоркой несколько меньшей. Какая это точно цифра, мне узнать не удалось, но со значением 1400 все работает на ура. Если этот параметр не указать, то интернет у вас тоже будет работать, но, поработав немного, вы заметите, что, оказывается, не можете добавлять в форумы сообщения, состоящие более чем из одной-двух строк. Неприятно. mtu 1400 спасет отца русской демократии.

Содержимое файла /etc/ppp/peers/ntc-gprs-connect-chat:

exec chat -vS       '' \rAT       TIMEOUT 12       OK ATH       OK ATE1       OK 'AT+CGDCONT=1,"IP","internet.ntc"'       OK ATD*99***1#       TIMEOUT 22       SAY "\nwaiting for connect...\n"       CONNECT ""       SAY "\nConnected."

Здесь, в зависимости от того, какой у вас оператор мобильной связи, может меняться только один параметр: APN (точка входа). Здесь я привел пример для НТК. Если, например, у вас "Мегафон дальний восток", то в качестве APN нужно указать internet.dv.

Содержимое файла /etc/resolv.conf:

# Для NTC IP адреса DNS серверов будут такими:
nameserver 80.243.64.67
nameserver 80.243.68.34

# Для "Мегафон дальний восток" такими:
nameserver 83.149.52.77
nameserver 194.186.112.18

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

$ pppd call ntc-gpts

Материалы по теме:

P.S.: Очень рекомендую источник [3]. Обнаружил я эту статью уже после того, как написал свою. Кстати, телефон у автора такой же как у меня ;)

(c) Rayven, 2006.