Эта интересная штука пришла к нам от дебиана (http://ru.wikipedia.org/wiki/Debian). Собственно, "deb" - это есть сокращение от "debian".
http://ru.wikipedia.org/wiki/Deb_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)
http://ru.wikipedia.org/wiki/Dpkg
пятница, 24 июля 2009 г.
четверг, 23 июля 2009 г.
Отключаем initrd в убунте.
Недавно провел эксперимент - просто отключил в грабе initrd. Система спокойно и без ругани загрузилась. Самые необходимые модули уже встроены в ядро, даже ext4. Можете проверить сами и убедиться.
В грабе, на строчке с выбором ядра, жмем букву "e" на клаве, стрелками выбираем строчку со словом "initrd" и нажимаем букву "d". Далее стрелками снова выбираем строчку со словом "kernel ..." и секцию "root=UUID=........." заменяем на "root=/dev/sdaX", где Х - номер раздела, куда установлена убунту. Нажимаем "ENTER" и потом букву "b". Если система загрузится нормально - можете уже исправить конфиг граба. Убунту будет грузиться еще быстрее.
Чтобы отключить уже в грабе, достаточно открыть его конфиг
gksudo gedit /boot/grub/menu.lst
найти там строчку типа
initrd /boot/initrd.img-2.6.28-14-generic
и закомментировать ее, то есть поставить перед ней знак решетки "#"
# initrd /boot/initrd.img-2.6.28-14-generic
Кто использует уже скомпиленные ядра в deb-пакетах, скаченные с http://kernel.ubuntu.com/~kernel-ppa/mainline/, может тоже уже не использовать initrd.
Только хочу предупредить, что initrd все равно иногда просто необходим системе. Например, если у вас проблемы с файловой системой, инитрд сначала проверить ее на ошибки, исправит их, а потом только подмонтирует и продолжит загрузку. Единственный плюс от его отключения - это опять уменьшение времени загрузки убунты.
В грабе, на строчке с выбором ядра, жмем букву "e" на клаве, стрелками выбираем строчку со словом "initrd" и нажимаем букву "d". Далее стрелками снова выбираем строчку со словом "kernel ..." и секцию "root=UUID=........." заменяем на "root=/dev/sdaX", где Х - номер раздела, куда установлена убунту. Нажимаем "ENTER" и потом букву "b". Если система загрузится нормально - можете уже исправить конфиг граба. Убунту будет грузиться еще быстрее.
Чтобы отключить уже в грабе, достаточно открыть его конфиг
gksudo gedit /boot/grub/menu.lst
найти там строчку типа
initrd /boot/initrd.img-2.6.28-14-generic
и закомментировать ее, то есть поставить перед ней знак решетки "#"
# initrd /boot/initrd.img-2.6.28-14-generic
Кто использует уже скомпиленные ядра в deb-пакетах, скаченные с http://kernel.ubuntu.com/~kernel-ppa/mainline/, может тоже уже не использовать initrd.
Только хочу предупредить, что initrd все равно иногда просто необходим системе. Например, если у вас проблемы с файловой системой, инитрд сначала проверить ее на ошибки, исправит их, а потом только подмонтирует и продолжит загрузку. Единственный плюс от его отключения - это опять уменьшение времени загрузки убунты.
вторник, 14 июля 2009 г.
Программа "/sbin/init" и стартовые скрипты. Часть 1.
После того, как grub загрузил ядро линукса, это самое ядро по умолчанию запускает программу "/sbin/init" (в параметрах ядра можно указать другой путь до этой программы, "init=/usr/bin/my_init" к примеру или "init=/bin/bash" - чтобы запустить напрямую после ядра сразу bash). Ядро может запустить только одну программу, но эта программа должна взять на себя обязанность загружать все остальное. В winnt, кстати, используется почти такая же система - там роль "/sbin/init" играет программа "smss.exe". Сейчас, с использованием initrd-образов в большинстве дистрибутивах, программа init сначала запускается с этого самого образа, но потом все равно запускает "/sbin/init" с корневого раздела. Для того, чтобы легче было манипулировать с настройками загрузки системы и чтобы проще было добавлять сторонние программы в "автозагрузку", init использует конфиги, скрипты и т.д. Чаще всего - в текстовом формате. То есть, ядро запускает "/sbin/init", а тот в свою очередь уже запускает по порядку стартовые скрипты или парсит текстовый конфиг. В некоторых случаях же, "/sbin/init" сам представляет из себя шелл-скрипт, как на том-же образе initrd.
Загрузка всей системы - довольно сложный процесс. В него входит инициализация udev, hal и многого другого. Ради гибкости настроек и совместимости, в большинстве случаев, теряется производительность. Скрипты и конфиги для инита уже переросли в целые системы, пакеты с кучей файлов.
Долгое время в *NIX системах использовалась система стартовых скриптов sysvinit. Сейчас же sysvinit сильно устарел и на его смену пришло очень много других вариантов - InitNG, Upstart, runit, eINIT, Kyuba... В убунте к примеру уже используется upstart, в генту - initng.
В общем, в следующих частях этой темы и опишу различия этих систем, сделаю краткий обзор. Потом постараюсь описать работу убунтовского Upstart. А в будущем, с друзьями, планирую написать свой простенький init. В основном ради экспериментов, для опыта и для примеров.
Загрузка всей системы - довольно сложный процесс. В него входит инициализация udev, hal и многого другого. Ради гибкости настроек и совместимости, в большинстве случаев, теряется производительность. Скрипты и конфиги для инита уже переросли в целые системы, пакеты с кучей файлов.
Долгое время в *NIX системах использовалась система стартовых скриптов sysvinit. Сейчас же sysvinit сильно устарел и на его смену пришло очень много других вариантов - InitNG, Upstart, runit, eINIT, Kyuba... В убунте к примеру уже используется upstart, в генту - initng.
В общем, в следующих частях этой темы и опишу различия этих систем, сделаю краткий обзор. Потом постараюсь описать работу убунтовского Upstart. А в будущем, с друзьями, планирую написать свой простенький init. В основном ради экспериментов, для опыта и для примеров.
Программа "/sbin/init" и стартовые скрипты. Часть 2.
Краткий обзор некоторых клонов init:
Upstart (http://upstart.ubuntu.com/ http://en.wikipedia.org/wiki/Upstart)
Загружает сервисы по событиям.
InitNG (http://www.initng.org/ http://en.wikipedia.org/wiki/Initng)
eINIT (http://en.wikipedia.org/wiki/Einit)
minit (http://www.fefe.de/minit/)
cinit (http://linux.schottelius.org/cinit/)
twsinit (http://www.energymech.net/users/proton/)
runit (http://smarden.org/runit/)
Kyuba (http://kyuba.org/)
myinit (http://sourceforge.net/projects/myinit/)
Ссылки:
http://www.freesource.info/wiki/TZ/initscripts?show_files=1 (Описание работы sysvinit, upstart и initng на русском языке)
http://www.redhat.com/docs/manuals/enterprise/RHEL-5-manual/ru-RU/Installation_Guide/s2-boot-init-shutdown-init.html
http://en.wikipedia.org/wiki/Init (Страница о /sbin/init в википедии на английском языке)
http://www.busybox.net/
http://users.rsise.anu.edu.au/~okeefe/p2b/power2bash/power2bash.html (Описание загрузки линукса от включения питания до приглашения bash на английском языке)
http://wiz.su/2008/03/06/kak-zagruzhaetsya-linux/ (Пример использования runit с простыми скриптами - на русском языке)
http://ru.wikipedia.org/wiki/Процесс_загрузки_Linux (Процесс загрузки Linux в википедии на русском языке)
http://www.linuxshare.ru/docs/distro/lfs/lfs6/chapter07/usage.html (Информация о работе стартовых скриптов из LFS, тоже на русском языке)
http://wiki.kryukov.biz/wiki/Система_инициализации_Slackware_Linux (Инит-скрипты в слаке, на русском)
Upstart (http://upstart.ubuntu.com/ http://en.wikipedia.org/wiki/Upstart)
Загружает сервисы по событиям.
InitNG (http://www.initng.org/ http://en.wikipedia.org/wiki/Initng)
eINIT (http://en.wikipedia.org/wiki/Einit)
minit (http://www.fefe.de/minit/)
cinit (http://linux.schottelius.org/cinit/)
twsinit (http://www.energymech.net/users/proton/)
runit (http://smarden.org/runit/)
Kyuba (http://kyuba.org/)
myinit (http://sourceforge.net/projects/myinit/)
Ссылки:
http://www.freesource.info/wiki/TZ/initscripts?show_files=1 (Описание работы sysvinit, upstart и initng на русском языке)
http://www.redhat.com/docs/manuals/enterprise/RHEL-5-manual/ru-RU/Installation_Guide/s2-boot-init-shutdown-init.html
http://en.wikipedia.org/wiki/Init (Страница о /sbin/init в википедии на английском языке)
http://www.busybox.net/
http://users.rsise.anu.edu.au/~okeefe/p2b/power2bash/power2bash.html (Описание загрузки линукса от включения питания до приглашения bash на английском языке)
http://wiz.su/2008/03/06/kak-zagruzhaetsya-linux/ (Пример использования runit с простыми скриптами - на русском языке)
http://ru.wikipedia.org/wiki/Процесс_загрузки_Linux (Процесс загрузки Linux в википедии на русском языке)
http://www.linuxshare.ru/docs/distro/lfs/lfs6/chapter07/usage.html (Информация о работе стартовых скриптов из LFS, тоже на русском языке)
http://wiki.kryukov.biz/wiki/Система_инициализации_Slackware_Linux (Инит-скрипты в слаке, на русском)
пятница, 10 июля 2009 г.
Linux-Сообщество Узбекистана

Так как решил снова заняться сообществом, большинство моих сил будут направлены на
http://www.linux.uz
Со временем, допишу все свои статьи и перетащу туда, а пока все-таки буду писать сначала сюда, как в черновик.
вторник, 7 июля 2009 г.
Патчим ядро 2.6.30 для поддержки aufs и unionfs
git clone http://git.c3sl.ufpr.br/pub/scm/aufs/aufs2-standalone.git aufs2-standalone.git
cd aufs2-standalone.git
git checkout origin/aufs2-30
cp -rvi fs/ ../kernel/linux-2.6.30/
cp -rvi include/ ../kernel/linux-2.6.30/
cp -rvi Documentation/ ../kernel/linux-2.6.30/
cd ../kernel/linux-2.6.30
patch -p1 < ../../aufs2-standalone.git/aufs2-kbuild.patch
patch -p1 < ../../aufs2-standalone.git/aufs2-standalone.patch
#wget -c http://download.filesystems.org/unionfs/unionfs-2.x/unionfs-2.5.2_for_2.6.30.diff.gz
#gzip -d unionfs-2.5.2_for_2.6.30.diff.gz
#cd ../kernel/linux-2.6.30
#patch -p1 < ../patches/unionfs-2.5.2_for_2.6.30.diff
cp /boot/config-2.6.30-020630-generic ./.config
sudo apt-get install kernel-package
export CONCURRENCY_LEVEL=3
Aufs (AnotherUnionFS)
Aufs - это "вспомогательная файловая система для каскадно-объединенного монтирования". То есть, говоря простым языком, это файловая система, которая позволяет, например, смонтировать две файловые систему в одну папку, но с разными параметрами. Ее обычно используют на Live-CD дистрибутивах - на них нет возможности записи файлов, так как диск монтируется в режиме read-only. Там и необходима штука типа aufs. Она монтирует read-only фс и фс в оперативной памяти в одну фс. В итоге получается, что все изменения read-only фс записываются в оперативную память.
понедельник, 6 июля 2009 г.
Initial RAM-Disk (initrd)
В большинстве дистрибутивах используется один очень полезный костыль - это initrd - Initial RAM disk, что по русски звучит круче - "диск в оперативной памяти для начальной инициализации". По названию и по некоторому опыту можно самостоятельно понять, что это некий образ диска, который грузиться в начале старта системы и используется для ее инициализации.
На деле - этот файл уже не является образом. Ветка ядер 2.6 уже поддерживает помимо образов еще и cpio архивы. То есть сейчас, файл initrd.img представляет из себя cpio-архив, сжатый обычно gzip'ом, внутри которого урезанная корневая файловая система. То есть, в нем те-же каталоги "/bin", "/etc" и т.д., но только не целиком взятые с основной корневой фс, а только лишь с необходимыми файлами для загрузки системы. То есть, там естественно будут утилиты типа "insmod", чтобы подгружать модули, "mount", чтобы монтировать уже настоящею корневую систему и т.д. Еще там находятся необходимые для загрузки модули - ведь ядро, например, не сможет получить доступ к файловой системе, поддержка которой скомпилена модулем, а сам модуль находиться на этой ФС. То есть ядро не сможет прочитать модуль с этой ФС, пока не загрузит этот модуль. Немного смешно звучит конечно, но собственно для таких целей и используется initrd. В нем просто находятся модули файловых систем, модули контроллеров жестких дисков и т.д.
Работает это все очень просто. Загрузчик, типа grub, загружает ядро линукса и в параметрах передает этому ядру файлик initrd. Ядро загружается, загружает в память содержимое initrd, запускает в нем программу "/sbin/init" которая уже задачи загрузки берет на себя. Подгружаются необходимые модули, монтируются файловые системы и дальше initrd передает уже управление загрузкой на основной корневой системе.
В разных дистрибутивах состав этого образа не одинаковый. Поэтому разберу его на примере уже в следующей теме.
На деле - этот файл уже не является образом. Ветка ядер 2.6 уже поддерживает помимо образов еще и cpio архивы. То есть сейчас, файл initrd.img представляет из себя cpio-архив, сжатый обычно gzip'ом, внутри которого урезанная корневая файловая система. То есть, в нем те-же каталоги "/bin", "/etc" и т.д., но только не целиком взятые с основной корневой фс, а только лишь с необходимыми файлами для загрузки системы. То есть, там естественно будут утилиты типа "insmod", чтобы подгружать модули, "mount", чтобы монтировать уже настоящею корневую систему и т.д. Еще там находятся необходимые для загрузки модули - ведь ядро, например, не сможет получить доступ к файловой системе, поддержка которой скомпилена модулем, а сам модуль находиться на этой ФС. То есть ядро не сможет прочитать модуль с этой ФС, пока не загрузит этот модуль. Немного смешно звучит конечно, но собственно для таких целей и используется initrd. В нем просто находятся модули файловых систем, модули контроллеров жестких дисков и т.д.
Работает это все очень просто. Загрузчик, типа grub, загружает ядро линукса и в параметрах передает этому ядру файлик initrd. Ядро загружается, загружает в память содержимое initrd, запускает в нем программу "/sbin/init" которая уже задачи загрузки берет на себя. Подгружаются необходимые модули, монтируются файловые системы и дальше initrd передает уже управление загрузкой на основной корневой системе.
В разных дистрибутивах состав этого образа не одинаковый. Поэтому разберу его на примере уже в следующей теме.
Подписаться на:
Сообщения (Atom)