суббота, 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 и монтировать на удаленной машине ОТДЕЛЬНО.
На этом пока всё. продолжение возможно следует.

среда, 30 мая 2007 г.

Возня с autoconf/automake

Параллельно с освоением Линукса я пытаюсь учить С++. В роли IDE у меня выступает Vim, обвешанный несколькими плагинами. Чтобы программы из вима было удобно собирать (командой :make), нужно создать Makefile. Руками писать его тупо, для этого обычно юзают autoconf&&automake&&etc. Гугл показал мне пару занимательных статей на эту тему, но ни одна из них не привела к желаемому результату. А к желаемому результату меня привели сразу две таких статьи, немного везения и метод научного тыка. Через неделю мне снова понадобилось создать мэйкфайл, и я уже с трудом вспомнил, как это делается. Поэтому решил описать этот процесс здесь, чтобы уж точно не забыть.
Итак, имеется простенькая программа в одном файле test.cpp

Для начала пишем
autoscan
И получаем файл configure.scan. Его переименовываем в configure.in и открываем в текстовом редакторе. Там меняем наш файл примерно так:

AC_PREREQ(2.60)
AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
AC_CONFIG_SRCDIR([test.cpp])
AM_INIT_AUTOMAKE([test], [0.1])
AC_PROG_CXX
AC_C_CONST
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
После этого можно запускать
aclocal
а при её успешном выполнении
autoconf
Результатом её работы будет скрипт configure. Создадим несколько нужных файлов
touch install-sh missing NEWS README AUTHORS ChangeLog
vim Makefile.am
Там напишем
bin_PROGRAMS=test
test_SOURCES-test.cpp
Теперь можем со спокойной душой запускать automake:
automake -a -c
с этими ключами оно создаст все необходимые файлы (можно убедиться в этом :) )
Всё. теперь можно запускать ./configure, затем make.

вторник, 29 мая 2007 г.

Выбор дистрибутива

Начать хотелось бы с дистрибутивов. Какие они бывают и какой выбрать -- этот
вопрос стоит перед каждым, кто решил поставить Линукс. Иногда юзер просто
ставит тот дистриб, который подвернулся под руку. Или, может быть, другой было
не так-то просто найти. Оба подхода неправильные, а их последствия могут
надолго отбить охоту изучать Линукс. Дистрибутивов огромное количество, и, я
думаю, важно, чтобы в первый раз новичок столкнулся с сколько-нибудь
дружественным дистрибутивом. Хорошо, если у дистрибутива простая установка,
хорошая документация, желательно наличие русификации. Обязательно выбирать тот
дистрибутив, к которому можно будет впоследствии найти дополнительную
информацию помимо той, что идет в комплекте. И ещё одна важная деталь. Как это
ни странно звучит, но ни в коем случае не используйте в ознакомительных целях
однодисковые "ознакомительные" дистрибутивы. Поставив такого инвалида, вы,
скорей всего, разочаруетесь, потому что крайне редко встречаются действительно
качественные однодисковые дистрибутивы. Зачастую разработчик убирает из
дистриба всё, что ему кажется необязательным, не особо заботясь о зависимостях
и т.д. В итоге в этом дистрибе может не работать часть софта (из-за отсутствия
нужных библиотек), там скорее всего не будет хорошей руссификации (за
исключением чисто русских дистрибов), или руссификация будет, но кривая --
например, русифицированный KDE при отсутствии хороших русских шрифтов
производит не самое хорошее впечатление, если вы, конечно, не умеете читать
квадратики ;)
Не могу утверждать стопроцентно, что какой-либо дистриб лучше других подходит
для новичка, однако из тех, что я пробовал, могу посоветовать три
Debian GNU/Linux. Я пробовал версию 3.1 Sarge, причем не просто пробовал,
а использовал достаточно длительное время. Вопреки всеобщему мнению, Дебиан
действительно подходит новичкам. Во-первых, у него удобный и понятный
инсталлятор, хоть и не очень эстетично выглядящий. Весьма приличная руссификация
поможет новичку, который не очень силен в английском. Но самое главное его
достоинство -- это огромное количество пакетов в комплекте. Тут вы найдете
практически любую библиотеку или приложение, кроме коммерческих. А это значит,
что на начальном этапе использования не придется компилировать программы из
исходников или качать скомпилированные пакеты из интернета. Однако многие
библиотеки устарели, и новые приложения могут отказаться запускаться из-за
отсутствия новых библиотек. Однако если использовать приложения из комплекта,
таких проблем не должно возникнуть. Обнадёживает то, что начиная с четвертой
версии дистриба, изменилась политика выпуска. Если раньше тестирование
дистрибутива занималo столько времени, что к моменту выпуска он был уже заметно
устаревшим, то теперь он будет выходить значительно чаще и оперативнее. Правда,
это может отрицательно сказаться на стабильности и безопасности. Debian
GNU/Linux -- полностью свободная система, так что вы можете скачать или
переписать его полную версию абсолютно легально и бесплатно.
MOPS. Его название расшифровывается как "Многофункциональная ОПерационная
Система". Он создан русскими на основе Skackware. Основные отличия от Slackware11:
* Доработан установщик
* Хорошо руссифицирован (в отличие от Слаквари, руссификация присутствует
* сразу), укомплектован русскими мануалами
* добавлены некоторые пакеты (например FreePascal и Gambas)
* и кое-что ещё
Этот дистриб отлично работает у меня сразу после установки, причем мне не
пришлось возиться с руссификацией. Отдельно настраивать пришлось только Иксы
(Xorg), но это совсем не сложно, об этом я ещё напишу потом. Дистрибутив
поставляется с ядром 2.6.18. Не самое новое, но скомпилировать другое не
составит труда. Об этом тоже потом напишу. Работать в этом дистрибутиве приятно,
напрягает разве что бедная по сравнению с Дебианом подборка пакетов в дистрибе.
Но уж точно всё необходимое (и даже больше) тут есть ;)
Mandriva/Mandrake. Лично я пробовал Мандрейк 10.0 и Мандриву 2007. Причем
последняя мне очень понравилась. Очень удобный и красивый инсталятор имеет много
возможностей и прекрасно настраивает систему при установке так, что потом не
приходится даже колупаться в настройках. Отличная поддержка русского языка "из
коробки" -- тоже, естественно, большой плюс. После установки системы можно
настраивать её через Control Center, который может значительно больше, чем,
например, виндовая "панель управления". Однако я не могу сказать, что это
идеальный дистрибутив для новичка. Если вам не хочется копаться в
конфигурационных файлах и настраивать систему руками, да и вообще, плевать вам
хотелось на unix-way и тому подобное, а хочется нахаляву получить хорошую
работоспособную систему, которую не надо воровать и за которую не получишь срок
-- тогда Мандрива для вас. Но если хочется действительно понимать систему, уметь
действовать в разных, в том числе непредвиденных, ситуациях, стать действительно
хорошим пользователем Линукса -- тогда советую обратить внимание на Дебиан или
Slackware (и их производные). Конечно, пользование Дебианом не вознесло меня на
такие высоты пользовательского мастерства, однако поверьте -- пользуясь
Мандривой, можно годами оставаться на том же уровне, что и вначале. А с
Слакварью или Дебианом так не выйдет -- суровая действительность заставить
развиваться :)

Также скажу пару слов про другие дистрибы, которые пробовал

ASPLinux9 (однодисковый) -- если меня не подводит память, это первый
дистрибутив Линукса, который я ставил на свой комп. Помню, впечатлило, что на
одной болванке поместилась система с офисным пакетом, графическим редактором
(который Gimp) и прочими нужными и не очень вещами. Сразу захотелось поставить
дистриб побольше

RedHat7 -- ой, и старый же. даже тогда, когда я его ставил, этот дистр был уже
сильно устаревшим.

Mandrake 10.1 -- счастье есть. Добротный дистриб на четырех дисках. Работает
всё, и весьма неплохо. Красиво. Интересно. Не очень сложно. Правда, немного
скучновато...

Slackware 10 -- первое впечатление -- "а почему так мало дисков?". Второе -- а
где русский??? Русский было не очень удобно прикручивать, когда все доки,
описывающие этот процесс, написаны тоже на русском. Это потом я узнал о
прикольном консольном браузере links, который, наряду с ещё многими другими
нужными вещами, умел показывать русские тексты транслитом. Ещё не понравилось,
что юзера после установки надо создавать вручную

Debian 3.1 (на 2 CD-дисках) -- ууууух ты!!! супер! Не знаю почему, но Дебиан
меня торкнул неслабо. Заказал в местном интернет-магазине версию на 2 DVD. Про
неё см. выше.

Mandriva 2007 -- класс. добралась-таки до линуксов цивилизация. Всё очень
респектабельно. Всё работает. И как быстро!!! Эта мандрива показалась по
сравнению с предыдущими просто реактивной. Но всё равно та же проблема, что и в
Mandrake10 -- скучновато...

MOPS Linux 5.1 -- вот мой дом родной. Здесь я чувствую себя спокойно и даже
немного уверенно :) И дух экспериментаторства постоянно витает вокруг. Так и
хочется что-нибудь улучшить, подогнать под себя... ;)

Ну и хватит для начала. К теме дистрибутивов хочу добавить, что, хотя "свой"
дистр найти сразу невозможно, всё же не стоит увлекаться "пробованием" разных
дистрибов. Я потратил на это довольно много времени, которое могло быть
испльзовано для тщательного освоения какого-то одного дистра.

Следующий раз планирую осветить некоторые аспекты установки Linux-системы (на
примере любимого MOPS'а) на машину, где уже стоит Вынь.

Начинаем

Вообще мне не очень нравятся блоги как явление, однако я решил завести свой, чтобы писать здесь о своих экспериментах с Linux. Чтобы не забыть. А может, кому-нибудь эта инфа и пригодится. В конце концов, не всем же учиться на своих ошибках, зачастую лучше идти по накатанной дороге.
Используя Linux, приходится иногда сталкиваться с некоторыми проблемами (иногда совсем несерьезными), которые как правило вскоре решаются. Но на радостях способ решения проблемы быстро забывается, и в следующий раз в такой же ситуации снова приходится изобретать велосипед. Я буду описывать здесь свои эксперименты с Линуксом, чтобы эта инфа сохранилась.
Я задумывал всё это как цикл небольших статей/заметок. Одна уже есть, остальные буду постепенно добавлять.