суббота, 23 июня 2007 г.

Модификация LiveCD-дистрибутива Slax

Давно хотел изменить какой-нибудь LiveCD дистрибутив. Вначале думал взять за основу Кнопикс, но у меня был слишком старый экземпляр. Зато на диске от одного журнала (не будем называть его) нашел отличный маленький новый дистриб Slax. Я давно уже слышал о том, что на основе Slax очень легко сделать свой liveCd, но я даже не предполагал, насколько это просто. Насколько я понял, Slax сделан с использованием скриптов linux-live (взять их можно на linux-live.org). Этот набор скриптов позволяет без особых трудностей сделать свой LiveCD. На диске со slax'ом обнаружилось всё необходимое для изменения этого дистриба и добавления в него дополнительных пакетов. Пакеты здесь содержатся в форме так называемых "модулей" с расширением ".mo". Предполагается, что ленивый юзер просто скачает дополнительные модули с официального сайта (а их там довольно много). Если же дорогой инет или низкая скорость соединения не позволяет скачать модули, или же хочется добавить что-то, чего на оф.сайте не нашлось -- тогда можно без проблем преобразовать в "модули" любой готовый пакет.
Так как Slax основывается на Slackware, то проще всего будет переделать этот LiveCD счастливым пользователям слаквари или других основывающихся на слаквари дистрибутивов. Я как раз являюсь пользователем MOPS Linux 5.1, версия которого даже каким-то магическим образом практически совпала с версией имеищегося у меня Slax'а. Я решил для начала добавить в Slax пакеты для разработки. А что в первую очередь нужно для разработки под Linux'ом? Ну конечно же, gcc, make, autoconf, automake, и естественно Vim c плагинами. Вим входит в стандартную поставку Слакса, однако я предпочитаю GVim.
Для начала копируем содержимое диска со Слаксом на винт, допустим, в ~/slax
Процесс преобразования слакварных пакетов в модули до безобразия прост. Все необходимые скрипты лежат на диске со Слаксом в каталоге tools. Вот мой вольный перевод фрагмента документации по этому поводу

========перевод фрагмента официальной документации=======
========для тех кто не дружит с английским===============
How to create SLAX module
Как создать модуль для SLAX

Существует множество способов создания модулей для Слакса. Все команды, описанные здесь, работают непосредственно в Слаксе, однако могут работать и в Вашем собственном дистрибутиве. В этом случае, скачайте linux live scripts и запустите их. [примечание меня -- да ничего вобщем-то и качать не надо, всё (или почти всё) необходимое есть на диске в каталоге tools]
Следующая команда конвертирует пакет TGZ (пакет slackware) в модуль SLAX:
tgz2mo application.tgz application.mo
Если вы хотите изменить Ваш слакварный пакет перед созданием модуля, используйте команду
installpkg -root /tmp/package application.tgz
Эта команда инсталирует Ваш пакет в другой корневой каталог [different root] (здесь -- в /tmp/package). Измените нужные файлы, после чего конвертируйте дерево каталогов в модуль, используя команду
dir2mo /tmp/package module.mo
=========================================================

Преобразуем одним из вышеуказанных способов все нужные нам пакеты и копируем их в каталог modules, в нашем случае -- в ~/slax/modules. Все модули из этого каталога будут преобразовываться в нормальный вид во время загрузки, сразу после модулей из каталога base. Если по каким-то причинам мы не желаем, чтобы модули использовались каждый раз при загрузке, можно положить их в каталог optional. В этом случае, чтобы эти модули загрузились, надо грузить Слакс с опцией
load=name_of_module1,name_of_module2,name_of_moduleX
То есть в строке приветствия (когда только вставили диск в дисковод и пошла загрузка с него), надо вводить что-то типа
boot: slax load=wine,xmms
Или же в командной строке, когда дистр уже загрузился, вводим
uselivemod /path/module.mo
Как видим, возможностей много. Особое внимание следует обратить на файл isolinux.cfg. В нем можно изменить много интересных опций. В частности, можно добавить туда опцию load=... и autoexec=someprogram;someprogram2 etc. Его синтаксис вполне прост и понятен.
Если мы хотим включить в дистрибутив какие-то дополнительные файлы (настроечные, например), есть два способа сделать это
1. Изменением существующего модуля или созданием собственного
2. Второй способ хорош, когда нужно добавить пару файлов. Для этого есть каталог rootcopy. Помещаем туда нужные файлы, сохраняя пути (то есть, если мы хотим добавить наш конфиг иксов, то создаем в каталоге rootcopy каталоги /etc/X11, и туда кладем файл xorg.conf). Недостаток этого способа -- низкая производительность. К тому же, файлы хранятся несжатыми, что неприемлемо для файлов большого объема. Так что лучше, пожалуй, создать модуль, используя скрипт dir2mo.
Ну и наконец создаем iso образ, используя скрипт make_iso.sh

ЗЫ. По сути, большая часть этой статьи является пересказом по-русски документации с официального сайта. Надеюсь, никто не обидится на меня за это.
ЗЗЫ. Под винду есть программа MySlax Creator, позволяющая сделать кое-какие изменения, в том числе добавить или удалить модули, изменить параметры загрузки и кое-что ещё. Но зачем, если можно всё сделать из любимого Линукса? ;)

пятница, 1 июня 2007 г.

сеть...

Эта страшная история повествует о том, как я ставил Линукс на древнюю машину, а потом пытался настроить простейшую одноранговую сеть между двумя компами.
Хех. Это сейчас я так смело говорю "простейшую". А ведь ещё совсем недавно я понимал в сетях не больше, чем блондинко понимает в программировании на ассемблере. (по правде сказать, сейчас ситуация изменилась в лучшую сторону, но совсем ненамного). И вот мне захотелось узнать больше в этой области. Поэтому я вытащил из закромов старую машинку (пень-233, 128 метров оперативки, ничего более конкретного про неё сказать не могу), снес с её трёхгигового винта все виндовые разделы, временно поставил в неё DVD-привод, в который впихнул диск с любимым дистрибутивом -- MOPS 5.1, и уже собирался было "откинуцо на спинку кресла"... Но меня жостко обломали. Грузиться этот диск не захотел. При попытке загрузить ядро из дистриба оно начинало писать что-то типа unknown interrupt or fault at EIP много много цифр. Мне сразу вспомнилось, что где-то на линуксфоруме уже подсказывали кому-то столкнувшемуся с такой проблемой, что надо отключить в ядре acpi (ну или загрузиться с ядром без acpi). Но в МОПСе выбора ядра при установке я не нашёл. Недолго думая, я переставил веник из этой старой машинки в нормальную, туда же вернул ДВД-привод и поставил МОПС. То есть на новой машине, но на старый веник. После чего пересобрал ядро, отключив в нем acpi, добавил это ядро в конфиг Lilo и воткнул этот веник обратно в старую машину. И чудо таки произошло! МОПС благополучно загрузился.
Следующим этапом была настройка сети между ними. В нормальной машине была встроенная сетевуха, а в старую я ткнул какую-то 3COM'овскую. Обе сетевых карты успешно определились. Затем я занялся поиском инфы. Для начала почитал соответствующие разделы в книгах "Основы Slackware Linux" и "Slackware/MOPSLinux для пользователя". После их прочтения сделал следующее (и самое простое, что можно было сделать) -- ввел в консоли
netconfig
запустилась та же утилита, которая запускается при установке системы. Имена компьютеров назначил "main" и "old" соответственно для новой и старой машины, а имя домена -- "home". Главному компу назначил IP 192.168.0.1, а старому -- 192.168.0.2. Маску подсети -- 255.255.255.0. Но тут может быть много вариантов. После этого можно ввести "ifconfig -a". Должно вывестись что-то вроде этого:

eth0 Link encap:Ethernet HWaddr 00:04:61:59:16:46
inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Interrupt:11 Base address:0x6000

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:303432 errors:0 dropped:0 overruns:0 frame:0
TX packets:303432 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:184503478 (175.9 MiB) TX bytes:184503478 (175.9 MiB)

Значит, сеть есть ;)
Потом на главной машине в файл /etc/hosts добавил строку
192.168.0.2 old.home old
а на старой машине в аналогичный файл
192.168.0.2 main.home main
Можно теперь попинговать и убедиться,что пакеты идут. Запустим на основной машине
ping old
Потом остановим и если вывелось что-то типа вот этого

--- 192.168.0.2 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 4998ms
rtt min/avg/max/mdev = 0.033/0.033/0.037/0.007 ms

то есть количество отправленных пакетов равно количеству полученных, значит всё нормально. А вот теперь начинается магия. Вводим на стаааарой тормозной машине
ssh -l root main
, затем пароль суперпользователя, и рулим основной машиной удаленно :). Причем всё быстро и никаких тормозов. Получается что-то вроде терминала. (странно, но telnet у мну почему-то отказался работать. ну, что с ламо возьмешь). Это не просто баловство, теперь можно отключить монитор на одной из машин и работать с ней удаленно, не поднимая задницы с кресла.

Терминал -- это конечно хорошо, но ещё хотелось бы со старой машины иметь доступ к 250гиговому венику основной. Для расшаривания каталогов по сети служит NFS (Network File System). Советую хотя бы в общих чертах ознакомиться с документом NFS-HOWTO. Для начала убеждаемся, что ядро собрано с поддержкой NFS. По умолчанию она включена, но на домашних компах, которые не подключены к сети, её обычно выключают. Итак, если в ядре её нету -- включаем. Компилируем, перезагружаемся. Теперь устанавливаем пакет tcpip-*-*-*.tgz (из раздела N) и добавляем разрешение выполнения сценарию rc.inet2. Выполняем его, если до этого он был неисполняемым. Потом мне пришлось отдельно запускать (в следующем порядке) три утилиты
rpc.portmap
rpc.nfsd
rpc.mountd
Открываем файл /etc/exports и добавляем туда строки следующего вида
/mnt/win_f old(ro)
Ясно, что вначале пишется каталог, который предполагается расшарить, затем имя машины, которая будет его у себя монтировать, а затем опции.
Чтобы заставить демона nfsd перечитать конфиг, пишем
exportfs -a
exportfs
После этого можно на другой машине (в моем сллучае -- машине old) добавлять в fstab такую строку
main:/mnt/win_f /mnt/win_f defaults
Теперь можем писать в консоли
mount main:/mnt/win_f
предварительно создав каталог /mnt/win_f
Всё! Только нужно помнить, что, расшаривая корневой каталог, мы не расшариваем вложенные каталоги, которые примонтированы отдельно и хранятся на другом устройстве. Их надо добавлять в файл exports и монтировать на удаленной машине ОТДЕЛЬНО.
На этом пока всё. продолжение возможно следует.