Разные, на мой взгляд, интересные замечания, связанные с компьютерами в частности и техникой вообще.

пятница, 10 апреля 2009 г.

Монтирование образов жёстких дисков.

При работе с виртуальной машиной(qemu или VirtualBox) создаётся отдельный образ жёсткого диска со своей таблицей раздела и своими файловыми системами. Иногда нужно что-то быстро оттуда скопировать. Наладка сети между виртуальной машиной и хост-компом не всегда удобно, потому как если копировать надо много, занимает очень много времени. Расшаренные общие директории тоже не выход, так как для этого нужно устанавливать дополнительное ПО в хост-системе. Но выход есть.
Сперва надо переконвертировать образ диска в формат raw(как это сделать, надо смотреть в документации к используемой вирт-машине).
Далее подключаем образ к loop-устройству:
# losetup /dev/loop0 disk_image.raw

Разбиваем его на разделы:
# kpartx -av /dev/loop0

Проверяем, как всё прошло:
# ls -alF /dev/mapper
brw-rw—- 1 root disk 253, 4 2007-11-24 14:56 loop0p1
brw-rw—- 1 root disk 253, 5 2007-11-24 14:56 loop0p5

И, собственно, монтируем:
# mount /dev/mapper/loop0p1 /mnt/


Решение взято отсюда.

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

Compiz в xfce4. Debian GNU/Linux 5.0 Lenny

После обновления с Etch сменилось ядро. Соответственно, отпали дрова на видеокарту(если они были установлены не из стандартного репозитария). И как следствие отпал compiz.
Лечение.
1. Ставим драйвера:
apt-get install nvidia-glx nvidia-kernel-2.6.26-1-686
Учитывайте, что ядро у вас может быть другое.
2. Обновляем компиз(на всякий случай ;):
apt-get --reinstall install compiz compiz-core
3. Прописываем автостарт:

$ cat ~/.config/autostart/compiz.desktop
[Desktop Entry]
Name=No Name
Encoding=UTF-8
Version=1.0
Exec=/usr/bin/compiz --replace --fast-filter
X-GNOME-Autostart-enabled=true
$ cat ~/.config/autostart/compiz_start.desktop
[Desktop Entry]
Encoding=UTF-8
Version=0.9.4
Type=Application
Name=compiz_start
Comment=Запуск декораций окон
Exec=/usr/bin/gtk-window-decorator --replace
StartupNotify=false
Terminal=false

Заметьте, что без второго файла работать толком не получится.
Вот, собственно и всё. Старая схема, работавшая в Etch теперь не поможет. Многие описания в гугле говорят, что всё делается проще с использованием файла /etc/xdg/xfce4-session/xfce4-session.rc, но у меня почему-то ни один wm стартовать оттуда не захотел.

четверг, 12 марта 2009 г.

Смена локали. Debian.

До недавнего времени использовал везде исключительно koi8-r. Но, всё течёт, всё изменяется. Решил перейти на utf-8.
Сама смена локали порблем не вызывает - dpkg-reconfigure locales и всё. С этим просто. Но дело в том, что имена всех файлов остаются в koi8-r. Тут пришлось немного поковыряться.
Первое, за что взялся - за колекцию музыки. Есть такая замечательная утилита EasyTag. Давно пользуюсь ей(все теги у меня уже давно в UTF). Она же умеет менять имена файлов в соответствии с тегами.
А вот для всех остальных файлов пришлось наваять маленький скриптик.
Для начала, копирую все файлы, которые надо переименовать в отдельную директорию. Далее, создаю временный файл с листингом этой директории:
ls -1 tmpdir/ > tmpfile
Этот файл надо слегка обработать. ls добавляет туда неотображаемые символы, которые в скрипте обрабатывать мне показалось сложновато. Я их просто убрал с помощью vim. В командном режиме:
%s/\e\[0m//g
Теперь собственно скрипт:

#!/bin/bash
#
STRN=$2

for((i=1;i<=$STRN;i++)) do
# Получаем каждое определённое имя файла в UTF по очереди.
UTFNAME=`cat tmpfile | iconv -f koi8-r -t utf-8 | tail -n ${i} | head -n 1`
# Получаем каждое отдельное текущее имя файла
KOI8NAME=`ls -1 ${1} | tail -n ${i} | head -n 1`
rename ${1}"${KOI8NAME}" new/"$UTFNAME"
done

Число STRN - количество файлов из листинга. Это число можно получить с помощью cat -n tmpfile. Директорию new создал руками. Всё. После отработки скрипта(в качестве первого аргумента даём ему tmpdir, а второго -количество файлов), в new будут лежать все наши файлики с именами в utf-8.

P.S. Перемещать файлы, предназначенные для переименования во временную директорию надо только с помощью cp! Никаких mc.

Update: В обсуждении этого способа на welinux.ru подсказали, что есть утилита convmv. Вердикт - гуглите, перед тем, как браться за что-то! :)

Update2: Оказывается всё ещё проще. В Debian есть пакет, специально предназначенный для смены локали на utf-8: utf8-migration-tool

вторник, 10 февраля 2009 г.

Мобильный интернет в Debian GNU/Linux.

Так уж получилось, что последнее время к "нормальному" интернету доступа нет. Поэтому приходится пользоваться мобильными технологиями(как-никак на дворе 21-ый век).
Итак, путь первый - выход через мобильный телефон.
У меня Sony Ericsson k320i. usb-шнурок шёл в комплекте. При подключении к компьютеру телефон спрашивает, в каком режиме ему работать: передача файлов или режим телефона. В данном случае выбираем второе. Перед подключением я запустил tail -f /var/log/messages и получил такие строки:
Feb 10 10:06:51 damned kernel: usb 2-3: new full speed USB device using ohci_hcd and address 3
Feb 10 10:06:51 damned kernel: usb 2-3: configuration #1 chosen from 1 choice
Feb 10 10:06:52 damned kernel: cdc_acm 2-3:1.1: ttyACM0: USB ACM device
Feb 10 10:06:52 damned kernel: cdc_acm 2-3:1.3: ttyACM1: USB ACM device
Feb 10 10:06:52 damned kernel: usbcore: registered new driver cdc_acm
Feb 10 10:06:52 damned kernel: drivers/usb/class/cdc-acm.c: v0.25:USB Abstract Control Model driver for USB modems and ISDN adapters
Отсюда видно, что у меня появилось два новых устройства: /dev/ttyACM0 и /dev/ttyACM1. Дальше всё просто:
Создаём файлы настройки pppd(обязательно должен быть установлен пакет ppp).

# cat /etc/ppp/chap-secrets
mts * mts
# cat /etc/ppp/pap-secrets
mts * mts
# cat /etc/ppp/options | grep -v "#"
asyncmap 0
auth
crtscts
lock
hide-password
modem
debug
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4
noipx
# cat /etc/ppp/peers/mts | grep -v "#"
user "mts"
connect "/usr/sbin/chat -v -f /etc/chatscripts/mts"
/dev/ttyACM0
noipdefault
usepeerdns
defaultroute
persist
noauth
# cat /etc/ppp/chat/mts
ABORT BUSY
ABORT 'NO CARRIER'
""
ATZ OK
AT+CGDCONT=1,"IP","internet.mts.ru" OK
ATDT*99***1#
CONNECT ""

Как видно, я использую mts. Основные параметры, типа номера дозвона, точки доступа, логина, пароля и т.д., можно узнать у мобильного оператора, так что с этим проблем быть не должно. Что касается того, что у меня продублированы логин с паролем и в chap, и в pap - это потому, что я так и не узнал, какой именно тип авторизации надо использовать, и для верности прописал оба. Хуже не будет. Ну и самое главное - это устройство модема, которое я узнал из messages.
В принципе, всё.
Подключение идёт командой pppd call mts. Я для удобства сделал скриптик:

#!/bin/bash
sudo /usr/sbin/pppd call mts

и добавил пользователя в /etc/sudoers, чтобы не логиниться под рутом каждый раз для выхода в инет.
Скорость, конечно, оставляет желать лучшего, но жить можно.
Но постоянно включать/выключать телефон со временем надоедат. Да и ко всему прочему денег много уходит, если пользоваться таким интернетом постоянно, а подключенный мной тариф "Ночной безлимитный" неудобен тем, что работать приходится только ночью. Поэтому было решено купить GPRS-модем.

Путь второй. ZTE MF626 USB Modem.

Тут всё чуть сложнее. Дело в том, что эта замечательная железка, сразу не определилась. В голове промелькнули мысли о пересборке ядра, но как всегда, гугл спас. Довольно быстро нашлась ссылка: http://ru.gentoo-wiki.com/wiki/MF626.
Беглый просмотр не обрадовал. Однако, после прочтения треда, из которого появилась эта статья, стало немного проще.
Сперва, запускаю, как обычно tail -f /var/log/messages и подключаю модем. Как и предсказано в статье, он определяется, как ZeroCD:
Feb 10 09:17:40 damned kernel: usb 1-1: new high speed USB device using ehci_hcd and address 5
Feb 10 09:17:40 damned kernel: usb 1-1: configuration #1 chosen from 1 choice
Feb 10 09:17:40 damned kernel: scsi6 : SCSI emulation for USB Mass Storage devices
Feb 10 09:17:45 damned kernel: Vendor: ZTE Model: USB SCSI CD-ROM Rev: 2.31
Feb 10 09:17:45 damned kernel: Type: CD-ROM ANSI SCSI revision: 00
Feb 10 09:17:45 damned kernel: sr1: scsi3-mmc drive: 0x/52x cd/rw xa/form2 cdda tray
Feb 10 09:17:45 damned kernel: sr 6:0:0:0: Attached scsi generic sg2 type 5

Если тут же заглянуть в dmesg, видно, что в устройствах он называется /dev/sr1 (на других машинах может быть иначе). Пробую eject /dev/sr1.
В messages вижу следующее:
Feb 10 09:19:57 damned kernel: usb 1-1: USB disconnect, address 5
Feb 10 09:20:02 damned kernel: usb 1-1: new high speed USB device using ehci_hcd and address 6
Feb 10 09:20:02 damned kernel: usb 1-1: configuration #1 chosen from 1 choice
Feb 10 09:20:02 damned kernel: scsi7 : SCSI emulation for USB Mass Storage devices
Feb 10 09:20:07 damned kernel: Vendor: ZTE Model: MMC Storage Rev: 2.31
Feb 10 09:20:07 damned kernel: Type: Direct-Access ANSI SCSI revision: 02
Feb 10 09:20:07 damned kernel: sd 7:0:0:0: Attached scsi removable disk sdb
Feb 10 09:20:07 damned kernel: sd 7:0:0:0: Attached scsi generic sg2 type 0

Т.е. выходит, что всё определилось без пересборки ядра или изменений внутренних настроек модема, предложенных в статье. В очередной раз говорю про себя "спасибо" разработчикам debian(а меня только недавно на gentoo сманивали).
Смотрим, как именно определилось с помощью cat /proc/bus/usb/devices

T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 6 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=19d2 ProdID=0031 Rev= 0.00
S: Manufacturer=ZTE, Incorporated
S: Product=ZTE CDMA Technologies MSM
S: SerialNumber=1234567890ABCDEF
C:* #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=500mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=none
E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=none
E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
I: If#= 2 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I: If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=none
E: Ad=84(I) Atr=03(Int.) MxPS= 64 Ivl=2ms
E: Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms

Устройство мы видим, но драйвер ещё не подгружен.
Подгружаю: modprobe usbserial vendor=0x19d2 product=0x031
Параметры vendor и product указаны в выводе предыдущей команды. В принципе, для данного модема они есть и в статье с гентушной вики.
В messages видно, что устройства создались:
Feb 10 09:43:00 damned kernel: usbcore: registered new driver usbserial
Feb 10 09:43:00 damned kernel: drivers/usb/serial/usb-serial.c: USB Serial support registered for generic
Feb 10 09:43:00 damned kernel: usbserial_generic 1-1:1.0: generic converter detected
Feb 10 09:43:00 damned kernel: usb 1-1: generic converter now attached to ttyUSB0
Feb 10 09:43:00 damned kernel: usbserial_generic 1-1:1.1: generic converter detected
Feb 10 09:43:00 damned kernel: usb 1-1: generic converter now attached to ttyUSB1
Feb 10 09:43:00 damned kernel: usbserial_generic 1-1:1.3: generic converter detected
Feb 10 09:43:00 damned kernel: usb 1-1: generic converter now attached to ttyUSB2
Feb 10 09:43:00 damned kernel: usbcore: registered new driver usbserial_generic
Feb 10 09:43:00 damned kernel: drivers/usb/serial/usb-serial.c: USB Serial Driver core

Отлично. В статье(и особенно в исходном треде) много говорилось про сложности работы с этими устройствами, однако для меня оказалось важным только одно: для основной работы используется именно третий интерйес, т.е. /dev/ttyUSB2.
Поэтому в настройках pppd создаю такой файл:
# cat /etc/ppp/peers/mts_modem | grep -v "#"
user "mts"
connect "/usr/sbin/chat -v -f /etc/chatscripts/mts"
/dev/ttyUSB2
noipdefault
usepeerdns
defaultroute
persist
noauth

Все остальные настройки совершенно такие же, как и при подключении через телефон.
Всё. Готово. Теперь, скомандовав pppd call mts_modem, я оказываюсь в интернете. Никаких проблем с разрывами соединения, описанных в статье, у меня не было. Поэтому и окончательное доведение до ума вышло проще. Достаточно ограничиться созданием правил в udev(обращаю внимание, что правила немного отличаются от приведённых в статье):
# cat /etc/udev/rules.d/z80_usb_modem.rules

SUBSYSTEMS=="usb", ATTRS{idVendor}=="19d2", ATTRS{idProduct}=="2000", RUN+="/usr/bin/eject /dev/sr1"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="19d2", ATTRS{idProduct}=="0031", RUN+="/sbin/modprobe usbserial vendor=0x19d2 product=0x031"

И изменении в скрипте для запуска инета mts на mts_modem.
Система: Debian GNU/Linux Etch 4.0r6
# uname -a
Linux damned 2.6.18-6-k7 #1 SMP Fri Dec 12 17:19:09 UTC 2008 i686 GNU/Linux

Дополнение.
Так как модем остаётся подключённым к системе постоянно, нет надобности стартовать соединение вручную, поэтому я решил написать небольшой скрипт:
# cat /etc/init.d/gprs_inet.sh
#! /bin/sh

PATH=/sbin:/bin

start () {
echo "Starting GPRS Internet Connection..."
/usr/bin/eject /dev/sr1 2>/dev/null
# Задержка нужна, потому как между отключением ZeroCD и стартом
# собственно модема, проходит время.
/bin/sleep 10
/usr/sbin/pppd call mts_modem
echo "GPRS Connection Established."
}

stop () {
echo "Stoping GPRS Connection..."
/usr/bin/killall pppd 2>/dev/null
echo "GPRS Connection is stopped."
}

case "$1" in
start)
start
;;
restart)
stop
start
;;
stop)
stop
;;
*)
echo "Usage: gprs_inet.sh [start|restart|stop]" >&2
exit 0
;;
esac


Этот скрипт сохраняется в /etc/init.d/ и добавляется в загрузку/останов с помощью команды update-rc.d gprs_inet.sh defaults

вторник, 20 января 2009 г.

Книги на телефоне.

Являюсь счастливым обладателем телефона Sony Ericsson k320i.
Отличная модель, к слову. Устраивает во всём.
Так как практически вся библиотека хранится в цифре, а читать хочется не только за компом, решил обзавестись читалкой на телефоне.
Ставить какие-нибудь java-книги и т.д. очень не хотелось. К тому же почти сразу появилась идея читать с помощью встроенного броузера. Но сразу же столкнулся с проблемой оперативной памяти. Броузер на телефоне не мог открывать большие файлы. Надо их как-то резать. Сперва ещё планировал каждый из маленьких текстовых файлов форматировать в html, однако оказалось, что встроенный броузер понимает txt(правда только в кодировке utf-8). В итоге решилось всё простым скриптом:

% cat textrebuild.sh
#!/bin/bash
#
# Разбиваем исходный файл на куски по 20000 байт.
split -b 20000 -d $1;
# Удаляем исходный файл
rm -f $1;
# Все кусочки переименовываем в файлы
# вида x<порядковый номер>.txt
# и перекодируем в utf-8, удаляя исходные.
FLIST=`ls ./ | grep -v textrebuild.sh`
a=0
for i in $FLIST
do
a=`echo "${a} + 1" | bc`;
cat $i | iconv -f koi8-r -t utf-8 > x${a}.txt;
rm -f $i
done

Вот и всё. Работает всё просто. Натравливаем скрипт на обычный текстовый файл с книгой и получаем на выходе кучу маленьких текстовых файлов в юникоде. Всё это потом скидывается на телефон через usb и читается по порядку в соответствии с порядковым номером.

воскресенье, 23 ноября 2008 г.

Создание LiveCD с помощью LiveCD. Часть вторая.

Итак, попытка №2.

В этот раз я, как и планировал, файл для создания моей фс сделал больше. Почти 9 гигов. Разбить его отдельно на два раздела не вышло. Оказывается, так нельзя, поэтому снова swap подключался отдельным файлом. Единственное различие, что его я тоже увеличил. Сделал гиг(как оказалось потом, не зря).
Копирование базовой системы прошло удачно.
Далее в инструкции предлагается не совсем понятная конструкция
cd /cdrom; find . -size -10000k -type f -exec cp -p --parents '{}' /mnt/hda1/knx/master/ \;

Разумно рассудив, что непонятные скрипты(особенно, если вспомнить пресловутутю строчку на perl, убивающую систему) это не Ъ, я скопировал содержимое исходного CD руками:
# cd /cdrom ; cp -Rp ./* /mnt/mylivecd/knoppix/master/ 

Теперь начинаем формировать свой дистрибутив. Переходим в окружение нашей будущей системы:
# chroot /mnt/mylivecd/knoppix/source/KNOPPIX

Для нормальной работы монтируем proc:
# mount -t proc /proc proc

У меня ругнулось, что не может в mtab прописаться, но примонтировалось, поэтому особо не разбирался. После этого инструкция предлагает настроить сеть. Честно говоря, не знаю, почему так поздно, потому как я её включил ещё с самого начала. Поэтому сразу же перехожу непосредственно к настройке системы.
С помощью команд apt-get update, apt-cache search, dpkg -l, apt-get remove и apt-get install собираем нужный набор пакетов(подробности о командах в соответствующих манах). Я первым делом посмотрел в /etc/apt/sources.list и отключил непонятные источники со странными названиями и unstable ветку Debian, оставив только testing, security-апдейты и non-free-репозитарии. Остальное всё исключительно на вкус и цвет собирающего. Я удалил всё, что связано с kde, почти всё из гнома(gconf, к примеру пришлось оставить, потому как его в зависимостях требует xchat), доустановил несколько нужных мне программ. Особо стоит отметить обновление. В инструкции советуют не использовать apt-get upgrade, предупреждая, что после этого система может не загрузиться. Так как было уже далеко заполночь, а посмотреть на свой LiveCD хотелось сегодня, я не стал экспериментировать. Из-за этого обновлять некоторые пакеты(тот же iceweasel) приходилось, используя опцию apt-get --reinstall.
Когда с выбором пакетов закончено, убираем лишнее, командуя:
# deborphan | xargs apt-get -y remove

и чистим остальное:
# COLUMNS=200 dpkg -l |grep ^rc |awk '{print $2} ' | xargs dpkg -P
# apt-get clean

Всё. Здесь закончили. Отмонтируем proc(может ругнуться на то, что устройство занято; лечится нажатем Tab после umount /proc - тогда система покажет, что там лишнее примонтировано и сначала убиваем его, а потом и сам proc).
Выходим из окружения:
# exit

Теперь небольшая доработка напильником. Я хотел, чтобы система как имнимум по умолчанию подхватывала мой xorg.conf и настройки сети.
Как я уже описывал, флешка у меня отформатирована в ext2 и на ней находится раздел /home.
Я попытался научить систему монтировать её при старте. Вот тут я допустил небольшую ошибку. Толком не разобравшись в скриптах, я дописал несколько строчек в /mnt/mylivecd/knoppix/source/KNOPIIX/etc/init.d/knoppix-autoconfig
Как выяснилось потом, неправильно. :)
Кроме этого я в /mnt/mylivecd/knoppix/source/KNOPPIX/etc/init.d/ создаю скрипт cppmm-config.sh, с простым содержанием:
#!/bin/bash
/home/knoppix/cppmm-start.sh

В /home/knoppix/cppmm-start.sh тоже всё просто:
#!/bin/bash
echo "Hello, World!"

На скрипт в init.d делаю символическую ссылку /etc/rcS.d/S45cppmm-config
По задумке, этот скриптик будет вызван после монтирования дисков и перед стартом иксов.
Решение пришло уже только потом, о чём ниже я и напишу.
Мы на финишной прямой. Создаём сжатую файловую систему KNOPPIX:

# mkisofs -R -U -V "MyLiveCD" -publisher "cppmm" -hide-rr-moved -cache-inodes -no-bak -pad /mnt/mylivecd/knoppix/source/KNOPPIX | nice -5 /usr/bin/create_compressed_fs - 65536 > /mnt/mylivecd/knoppix/master/KNOPPIX/KNOPPIX

Вот здесь и припомнился гиг свопа. Запущенный на второй консоли top, показывал постоянную загрузку проца не меньше 80-ти процентов, а использование свопа за несколько минут с пары десятков килобайт выросло до почти 700-та метров. По времени всё это заняло около полутора часов на моей машине.
Обновляем её md5-хеш:
rm -f /mnt/mylivecd/knoppix/master/KNOPPIX/md5sums; find -type f -not -name md5sums -not -name boot.cat -not -name isolinux.bin -exec md5sum '{}' \; >> /mnt/mylivecd/knoppix/master/KNOPPIX/md5sums

И непосредственно создаём образ диска, ради которого всё и затевалось:
mkisofs -pad -l -r -J -v -V "KNOPPIX" -no-emul-boot -boot-load-size 4 -boot-info-table -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat -hide-rr-moved -o /mnt/mylivecd/knoppix/mylivecd.iso /mnt/mylivecd/knoppix/master

Вот и готов. Там же из-под LiveCD запускаю новоиспечённый образ с помощью, поставляемого с knoppix'ом qemu
# qemu -no-kqemu -boot d -cdrom /mnt/mylivecd/knoppix/mylivecd.iso

Ура! Стартует.
Не в силах больше ждать, записываю болванку, перегружаюсь и пытаюсь загрузиться уже на реальном компе. И тут сраз уже вижу, где просчитался. Всё грузится, как обычно, но вместо ожидаемого Hello, World! получаю ошибку о том, что в /home/knoppix никакого скрипта не найдено...
Поковырявшись и прогнав скрипты knoppix'а через bash -x понимаю, что править один из них и руками вписывать монтирование флешки - было опрометчиво. Но тут же меня осенило, что смонтировать можно с помощью тех же уровней загрузки(rc0, rc1 и т.д.).
Однако времени уже было 9 утра, потому перебирать заново образ почему-то стало лень. :)
Единственное, что сделал, это руками примонтировал флешку и посмотрел, как ведёт себя новоиспечённый LiveCD. Отлично! Кодеки на mp3/avi/и подобное подхватились. Софт, который я себе навыбирал работает отлично. Осталось только допилить внешний вид fluxbox, вписать в настройках пользователя нормальные шрифты и написать вменяемый скрипт для автостарта сети и подбрасывания конфига иксов. А так как этот скрипт находится на флешке, для изменений даже на уровне системы, мне уже не придётся каждый раз пересобирать весь образ LiveCD.

суббота, 22 ноября 2008 г.

Создание LiveCD с помощью LiveCD.

На данный момент у меня такая ситуация, что родной компьютер с родным Debian'ом находится далеко. А железка, за которой приходится работать с виндой, что меня совсем не радует. А снести винду нельзя. Но выход, вроде бы как найден. LiveCD. Однако не всё так просто. Под рукой оказался только LiveCD knoppix 5.1.1. Свою флешку на 512Mb я отформатировал под ext2, и перенёс туда все настройки из /home, сохранив туда так же нужный мне xorg.conf и параметры сети(/etc/network/interfaces). Но всё-таки неудобно. Во-первых, постоянно грузиться в консольный режим, руками копировать настройки сети и иксов в соответствующие диры, а потом стартовать это всё после каждой загрузки со временем надоедает. Во-вторых, не радует отсутствие кодеков для прослушивания музыки и просмотра фильмов(knoppix, как и большинство других дистров борется за чистоту лицензии, а потому в стандартной поставке этих вещей нет). В-третьих, набор программ. Нет моего psi, для jabber'а; iceweasel почему-то только из второй ветки; не установлен flash-plugin и т.д. и т.п.
Так как мы, линуксоиды - народ суровый, было принято решение собрать свой собственный LiveCD, который бы по-умолчанию при старте монтировал бы флешку, стягивал настройки иксов и сети, сразу же запускал бы эти иксы с моей конфигурацией и обладал бы нужным мне надором софта...
Полчаса общения с гуглом и попадается такая вот ссылка: http://www.knoppix.net/wiki/Knoppix_Remastering_Howto_Russian
Итак, попытка №1.
Переписывать всю доку не буду, стану останавливаться лишь на ключевых местах.
Нужен раздел. Причём раздел, отформатированный в файловую систему linux и размером не меньше 3-ёх гигов, как указано в мане. Не долго думая, монтирую виндовый диск(ntfs, благо пятый knoppix спокойно читает и пишет на эту недофс):
# mkdir /mnt/win
# mount -t ntfs /dev/hda1 /mnt/win -o iocharset=koi8-r,uid=1000,gid=1000,rw

iocharset даёт мне возможность не путаться с русскими названиеми файлов, uid и gid назначают владельца для вновь примонтированного раздела, rw разрешает чтение/запись
Создаю забитый нулями файл размером 3 гига:

# touch /mnt/win/myfilesystem
# dd if=/dev/zero of=/mnt/win/myfilesystem bs=1M count=3072

Как известно, для линухи - всё файл. В том числе и блочные устройства(винт, cdrom и т.д.). Раз так, значит и наоборот, потому работаю с этим файлом, как с обычным винтом. Для начала разбиваю на разделы:
# fdisk /mnt/win/myfilesystem

Сперва надо будет перейти в расширенный режим меню и создать цилиндры. После этого записать результат. Потом заново открываем фал fdisk'ом и, собственно, создаём раздел. Я не стал особо заморачиваться и на весь файл сделал один primary раздел. О том, как это делает подробно написано в man fdisk.
Наш "диск готов". Форматируем его(я выбрал обычную ext2, потому как этот раздел нужен только на время создания LiveCD, а потом не вижу смысла тратить место на жруналирование и другие навороты).
# mke2fs /mnt/win/myfilesystem

Теперь можно его примонтировать, и создать рабочую директорию.

# mkdir /mnt/mylivecd
# mount -t ext2 -o loop /mnt/win/myfilesystem /mnt/mylivecd
# mkdir /mnt/mylivecd/knoppix

Так как в доке было сказано, что потребуется не менее гига оперативы в сумме(собственно ОЗУ + своп), создаю файл подкачки(на моём компе всего 512 метров памяти, поэтому, чтобы было с запасом сделал 750-ти метровый swap):
# dd if=/dev/zero of=/mnt/mylivecd/knoppix/swapfile bs=1M count=750
# mkswap swapfile
# swapon swapfile

Далее действую по инструкции. Создаю рабочие директории:

# mkdir -p /mnt/mylivecd/knoppix/master/KNOPPIX
# mkdir -p /mnt/mylivecd/knoppix/source/KNOPPIX

Копирую туда исходную систему:
# cp -Rp /KNOPPIX/* /mnt/mylivecd/knoppix/source/KNOPPIX

Вот тут-то и наступаем на первые грабли. Получаем ошибку о том, что недостаточно места на диске. После проверки выясняется, что как всегда виноват оказался я сам. Инструкцию надо было сначала прочитать до конца, а потом браться за дело. Оказалось, дока несколько устаревшая и описывает процесс создания своего диска на основе knoppix 3.4. Видимо, с тех времён дистр несколько разросся. Проще говоря, 3-ёх гигов мало. Примерный подсчёт показал, что надо бы не менее 4,5. А так как на виндовом разделе у меня было свободно всего 4,4, пришлось всё отложить до лучших времён(до завтра ;)).

Итак, небольшой вывод. Больше всего я боялся за то, что возникнут проблемы с таким нагромождением примонтированныходна из другой фс. Оказалось, это не так страшно и жить можно. Единственное, что я решил на следующий раз, это файл "псевдодиска" разбить на два раздела с самого начала, один под рабочий, второй под swap.
Кроме этого с моим количеством памяти приходится экономить. С самого начала я выбрал загрузку knoppix'а в fluxbox(по умолчанию kde). В процессе работы не желательно iceweasel(утечки в памяти для этого замечательного броузера, к сожалению, уже давно стали притчей во языцех).
Кроме этого я настоятельно рекомендую забыть про всеми любимую konsole и по старинке работать в rxvt. Надёжнее.

В общем, надеюсь, завтра всё выйдет более удачно.