суббота, 25 июня 2011 г.

Своя сборка Ubuntu

Подготовка
Во время сборки часто придется выполнять команды с правами рута, поэтому сразу выполним:
sudo -s

Создадим папку, в которой и будем проводить все работы
mkdir ~/MyUbuntu
cd ~/MyUbuntu

Сделаем папку, в которую скопируем все файлы с образа компакт-диска убунты
mkdir myubuntu_iso
mount -o loop /путь/до/ubuntu-10.04-desktop-i386.iso /mnt
rsync -a /mnt/ myubuntu_iso
umount /mnt

А вот и пришло время распаковать уже сам squashfs-образ livecd, который из себя представляет корневую файловую систему убунты
unsquashfs myubuntu_iso/casper/filesystem.squashfs
mv squashfs-root myubuntu_root

Вход в chroot-окружение
Теперь можно приступить к изменениям. Для этого надо использовать chroot
cp /etc/hosts myubuntu_root/etc/
cp /etc/resolv.conf myubuntu_root/etc/     # Это строчка для того, чтобы в chroot-окружения работал инет
cp /etc/apt/sources.list myubuntu_root/etc/apt/sources.list # Это если вы планируете устанавливать ПО с помощью apt-get и т.п.
mount --bind /dev/ myubuntu_root/dev     # Это для доступа к устройствам хостевого компа
chroot myubuntu_root

Следующие команды необходимы для нормальной работы некоторых утилит в chroot-окружении, в частности — для самого apt-get, aptitude или synaptic
mount -t proc none /proc
mount -t sysfs none /sys
mount -t devpts none /dev/pts
export HOME=/root
export LC_ALL=C
dbus-uuidgen > /var/lib/dbus/machine-id
dpkg-divert --local --rename --add /sbin/initctl
ln -s /bin/true /sbin/initctl


Теперь есть возможность пользоваться консольными утилитами, как и в обычной убунте (nano, vi, apt-get, aptitude, gconftool-2, mv, cp и так далее)

Работа в chroot-окружении (установка пакетов, настройка и т. п.)
Если же хочется воспользоваться графическими утилитами (такими как synaptic, наприме), то в другом терминале запустите эту команду:
Xnest -ac :1

И у вас появится окошко, в котором и будут работать гуишные проги. В самом-же chroot-окружении нужно указать монитор (то самое окошко xnest’а):
export DISPLAY=localhost:1

И дальше уже можно спокойно запускать synaptic и т. п. Чтобы были рамки окон, тогда еще надо:
metacity &

Тут уже можно проделывать любые операции как в обычной убунте — будь то установка пакетов, изменение конфигов и т. п.
Небольшой пример использования gconftool-2, чтобы кнопочки в metacity были справа:
gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.defaults --type string --set «/apps/metacity/general/button_layout» «menu:minimize, maximize, close»

Выход из chroot-окружения
После проделанных изменений, нужно удалить временные файлы, отмонтировать фс и т. п.:
aptitude clean
rm -rf /tmp/* ~/.bash_history
rm /etc/resolv.conf
rm /var/lib/dbus/machine-id
rm /sbin/initctl
rm /etc/apt/sources.list      # Хотя этот файл можно оставить, если хотите, чтобы в сборке были прописаны зеркала
dpkg-divert --rename --remove /sbin/initctl
umount /proc
umount /sys
umount /dev/pts
exit                                 # Выходим из самого chroot-окружения
umount myubuntu_root/dev


Подготовка ISO-образа
Если мы изменили состав ПО в сборке, то надо выполнить следующие команды, которые сделают новые списки пакетов:
chmod +w myubuntu_iso/casper/filesystem.manifest
chroot myubuntu_root dpkg-query -W --showformat='${Package} ${Version}\n' > myubuntu_iso/casper/filesystem.manifest
cp myubuntu_iso/casper/filesystem.manifest myubuntu_iso/casper/filesystem.manifest-desktop
sed -i '/ubiquity/d' myubuntu_iso/casper/filesystem.manifest-desktop
sed -i '/casper/d' myubuntu_iso/casper/filesystem.manifest-desktop

Собственно, файлы *.manifest — это список пакетов в системе и файл filesystem.manifest-desktop — это файл только тех пакетов, которые буду устанавливаться на комп. То есть, если вы хотите оставить пакет на livecd, но сделать так, чтобы он не ставился на компьютер во время установки, то просто удалите его упоминание в этом файле.
Если вы поменяли или обновили ядро в chroot-окружении, то это же ядро надо скопировать на сам диск, чтобы могли грузиться модули. Например:
cp myubuntu_root/boot/vmlinuz-2.6.32-22-generic myubuntu_iso/casper/vmlinuz
cp myubuntu_root/boot/initrd.img-2.6.32-22-generic myubuntu_iso/casper/initrd.gz
gzip -dc myubuntu_iso/casper/initrd.gz | sudo lzma -7 > myubuntu_iso/casper/initrd.lz

Теперь необходимо запаковать корневую файловую систему обратно в squashfs-образ:
rm myubuntu_iso/casper/filesystem.squashfs
mksquashfs myubuntu_root myubuntu_iso/casper/filesystem.squashfs
rm -r myubuntu_root      # Для экономии можно удалить распакованную корневую фс

Если хотите, чтобы при загрузке livecd автоматически выбирался русский язык:
echo "ru" > myubuntu_iso/isolinux/lang

Так как в составе диска убунты поменяли файлы, нужно пересоздать файл md5sum.txt
cd myubuntu_iso
rm md5sum.txt
find -type f -print0 | sudo xargs -0 md5sum | grep -v isolinux/boot.cat | sudo tee md5sum.txt

И можно уже приступить к созданию самого iso-образа:

mkisofs -D -r -V "$IMAGE_NAME" -cache-inodes -J -l -b isolinux/isolinux.bin /
-c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table /
-o ../ubuntu-$VERSION-custom.iso .

пятница, 24 июня 2011 г.

Удалённое включение ПК c Linux

Для того, чтобы иметь возможность разбудить компьютер удалённо, необходимо, чтобы в нём был установлен источник питания ATX версии не ниже 2.01, материнская плата, поддерживающая Wake On Lan, а также сетевая плата с поддержкой этой технологии.

Настройка

Определить, поддерживает ли материнская плата вашего компьютера Wake On Lan, можно зайдя в настройки CMOS Setup в раздел настроек управления питанием.
Найдите там опцию «Wake On Lan» и убедитесь, что она включена.

После загрузки системы установите, если необходимо, пакет ethtool, при помощи которого можно в том числе и переключать сетевую плату в режим пробуждения по сигналу Wake On Lan от других машин:

sudo apt-get install ethtool

Далее, необходимо определить, поддерживает ли установленная сетевая плата Wake On Lan, и включена ли эта опция:


sudo ethtool eth0 | grep -i wake-on


Supports Wake-on: pumbg
Wake-on: d

В строке Supports Wake-On перечислены механизмы, поддерживаемые сетевой платой. В моём примере я пользуюсь методом отправки так называемым Magic Packet, и если вам нужно то же самое, то убедитесь, что в Supports Wake On присутствует буква «g». Буква «d» в строке Wake-on обозначает, что Wake On Lan для данного сетевого интерфейса отключён. Чтобы включить его в режим распознавания Magic
Packet, необходимо выполнить:

ethtool -s eth0 wol g

Имейте ввиду, что после включения компьютера, вероятней всего, опция Wake-on опять перейдёт в состояние «d» , добавте в /etc/rc.local

ethtool -s eth0 wol g

,где eth0 это сетевая карта подключенная в локальную сеть.

Теперь всё готово для пробуждения системы по получению Magic Packet. Для того, чтобы его отправить, необходимо знать MAC-адрес сетевого интерфейса включаемого компьютера, поэтому прежде, чем выключать систему, запишите его:

ifconfig eth0 | grep -i hwaddr

eth0      Link encap:Ethernet  HWaddr 00:0e:2e:b9:cb:ad

Включение

Теперь с любого другого компьютера, находящегося в том же сегменте локальной сети (в принципе, это необязательно, но тогда необходимо, чтобы в вашей сети маршрутизаторы корректно пробрасывали широковещательные пакеты), можно включить ранее сконфигурированную удалённую систему. Для этого понадобится утилита
wakeonlan, которую необходимо установить:

sudo apt-get install wakeonlan

Разбудить выключенную систему теперь можно командой (обратите внимание, wakeonlan не требует прав суперпользователя):

wakeonlan -p 8 00:0e:2e:b9:cb:ad

Опцией -p указывается номер UDP-порта, с которого будет отправлен Magic Packet. Указание этой опции обязательно, поскольку по умолчанию wakeonlan использует девятый порт, помеченный в /etc/services как discard, что означает то, что пакет с этого порта отправить не получится. В принципе, можно использовать любой незанятый в системе UDP-порт.

вторник, 21 июня 2011 г.

Решение проблемы с русскими именами в zip

1.) Подключить репозиторий ppa:frol/zip-i18n
sudo add-apt-repository ppa:frol/zip-i18n
sudo apt-get update

2.) Установить библиотеку libnatspec0
sudo apt-get install libnatspec0

3.) Обновить пакеты p7zip-full, zip и unzip

4.) Удаляем пакет rar.

четверг, 16 июня 2011 г.

Установка программ не входящих в дистрибутив при помощи менеджера xstow

Установка пакета из исходников, обычный способ

Классический для свободного софта путь распространения, распространение в исходных текстах. В таком виде программа представляет собой архив с именем вида:
name-version.tar.gz
Установка такого софта производится выполнением набора несложных команд:
tar -xzvf name-version.tar.gz
  cd name-version
  ./configure
  make
  sudo make install
Расшифровка действий:

ШагКомандаЧто делает
1tar -xzvf name-version.tar.gzРаспаковка архива
2cd name-versionПереходим в полученный после распаковки директорий
3./configureНастройка исходников на нашу систему
4makeКомпиляция
5sudo make installУстановка

Проблемы

Проблема 1: Отсутствие нужных библиотек

Очень часто все не идет так гладко, а на шаге 3, команда configure на что-то жалуется. А жалуется она как правило на отсутствие нужных библиотек, или заголовков библиотек. Рассматриваем внимательно выход, который выдала команда configure на консоль и устанавливаем недостающие библиотеки и заголовки. Заголовки для Debian-подобных дистрибутивов, в том числе и для Ubuntu находятся в пакетах с суффиксом -dev в названии пакета.
Предположим мы увидели, что configure жалуется на библиотеку, устанавливаем ее в систему:
sudo apt-get install name
Запускаем configure опять. Теперь жалуется на заголовки этой же библиотеки. Устанавливаем и их:
sudo apt-get install name-dev
Ну наконец, установили все нужное, откомпилировали, работаем и получаем удовольствие. Казалось бы, счастье, вот оно. Но нет, вырисовывается проблема 2:

Проблема 2: Бардак в системе

Предположим, мы установили одну программу из исходников, другую, третью. И вдруг нам понадобилось удалить первую, или заменить ее версию. А мы, оказывается не знаем, какие файлы относятся к этой программе и где они. Одни программы устанавливают свои файлы в иерархию /usr/local , другие вообще в /usr . В общем, мы не знаем, как вычистить файлы, относящиеся к пакету.

Отступление: Стандартная иерархия файловой системы Linux (File System Hierarchy Standard)

В Linux есть стандарт на размещение файлов в системе. Ссылки приведены в разделе Литература. По этому стандарту, в иерархии директорий /usr должны храниться файлы используемые пользователями, в том числе и пользователям с других компьютеров. В иерархии директорий /usr/local - файлы используемые локальными пользователями. Таким образом нам нужно наши программы ставить в иерархию /usr/local, и при этом избежать бардака.

Улучшеный способ установки: менеджер пакетов xstow

Сделать это нам поможет менеджер пакетов xstow. Можно пользоваться также менеджером stow, xstow - это расширенная версия. Что он делает? Очень простую вещь. Мы устанавливаем наши программы в иерархию /usr/local/stow, каждую программу в свою директорию, а потом менеджер xstow создает символьные линки на наши файлы из иерархии /usr/local. Устанавливаем xstow:
sudo apt-get install xstow
Теперь последовательность операций при установке пакета с использованием менеджера xstow. 
tar -xzvf name-version.tar.gz
cd name-version
./configure --prefix=/usr/local/stow/name-version
make
sudo make install
cd /usr/local/stow/
sudo xstow name-version
Расшифровка действий:

ШагКомандаЧто делает
1tar -xzvf name-version.tar.gzРаспаковка архива
2cd name-versionПереходим в полученный после распаковки директорий
3./configureНастройка исходников на нашу систему
4makeКомпиляция
5sudo make installУстановка
6cd /usr/local/stow/Переходим в директорий, где лежат программы
7sudo xstow name-versionСоздаем символьные линки в иерархию /usr/local

Команда:
sudo xstow -D name-version
Удаляет символьные ссылки. После удаления ссылок директорию с файлами программы, находящуюся в /usr/local/stow/ можно удалять.


четверг, 2 июня 2011 г.

Список оборудования.

sudo lshw > ~/info
или
sudo lshw -short > ~/info

Создание списка установленных пакетов в Debian (Ubuntu).

Для того, чтобы создать список установленных в Debian (Ubuntu) пакетов можно воспользоваться следующей командой:
dpkg --get-selections > ~/installed_programs

Что бы записать в файл краткую информацию о пакетах (версия пакета и краткое описание):
COLUMNS=150 dpkg -l > ~/packages

Конвертирование русских тегов в юникод.

Для работы нужен python-mutagen: 
1.) sudo apt-get install python-mutagen (если не установлен python-mutagen)

2.) find /.... -iname "*.mp3" -print0 | xargs -0 mid3iconv -e CP1251 -d --remove-v1
где /.... - директория где искать файлы.