LINUX.ORG.RU
ФорумAdmin

[Gentoo][udev-181] Отдельный /usr без initramfs

 


0

3

Жил я себе не тужил и вот появилась толпа идиотов у которых separate_usr_is_broken (хотя у других все работало) и которые поломали его окончательно.

Вопрос как запилить все так же как и раньше и реально ли оно?

P.S. Отдельный /usr мне нужен по той причине, что он вынесен на LVM.

P.P.S. initramfs не нужен по той причине, что лишняя сущность и костыль при самосборном ядре.

★★★★★
  • diff -ruN src/udev-NNN src/udev-181 | colordiff | ANALYZE > /etc/portage/patches/sys-fs/udev/super-best.patch
  • emerge -a sys-fs/udev
  • ...
  • PROFIT!1
hizel ★★★★★
()

Модно, вот патчи для ебилдов:

kmod-7.patch

--- kmod-7.orig	2012-04-17 16:44:33.926805109 +0400
+++ kmod-7.ebuild	2012-04-17 16:43:24.513802712 +0400
@@ -20,7 +20,7 @@
 
 LICENSE="LGPL-2"
 SLOT="0"
-IUSE="debug doc lzma static-libs +tools zlib"
+IUSE="debug doc lzma static-libs +tools zlib usr"
 
 RDEPEND="!sys-apps/module-init-tools
 	!sys-apps/modutils
@@ -61,6 +61,10 @@
 
 	local myconf
 	[[ ${PV} == 9999 ]] && myconf="$(use_enable doc gtk-doc)"
+	
+	if use usr ; then
+			myconf="$myconf --bindir=/bin --libdir=/lib"
+	fi
 
 	econf \
 		$(use_enable static-libs static) \
@@ -74,16 +78,21 @@
 src_install()
 {
 	default
-
+	
+	local mypref
+	mypref="/usr/bin"
+	if use usr ; then
+		mypref="/bin"
+	fi
 	find "${D}" -name libkmod.la -exec rm -f {} +
 
 	if use tools; then
 		dodir /bin
-		dosym /usr/bin/kmod /bin/lsmod
+		dosym $mypref/kmod /bin/lsmod
 		dodir /sbin
 		local cmd
 		for cmd in depmod insmod modinfo modprobe rmmod; do
-			dosym /usr/bin/kmod /sbin/${cmd}
+			dosym $mypref/kmod /sbin/${cmd}
 		done
 	fi
 }

udev-182-r3.patch

--- udev-182-r3.orig	2012-04-17 16:38:07.911791781 +0400
+++ udev-182-r3.ebuild	2012-04-17 16:36:16.442787932 +0400
@@ -30,14 +30,15 @@
 LICENSE="GPL-2"
 SLOT="0"
 IUSE="build selinux debug +rule_generator hwdb gudev introspection
-	keymap floppy doc static-libs +openrc"
+	keymap floppy doc static-libs +openrc usr"
 
 COMMON_DEPEND="selinux? ( sys-libs/libselinux )
 	gudev? ( dev-libs/glib:2 )
 	introspection? ( dev-libs/gobject-introspection )
 	>=sys-apps/kmod-5
 	>=sys-apps/util-linux-2.20
-	>=sys-libs/glibc-2.10"
+	>=sys-libs/glibc-2.10
+	usr? ( sys-apps/kmod[usr] )"
 
 DEPEND="${COMMON_DEPEND}
 	keymap? ( dev-util/gperf )
@@ -142,11 +143,20 @@
 
 src_configure()
 {
+	local myconf
+	myconf="--libdir=/usr/$(get_libdir)"
+
+	if use usr ; then
+		myconf="--bindir=/bin --libdir=/lib"
+		declare -x KMOD_CFLAGS="-I/usr/include"
+		declare -x KMOD_LIBS="-L/lib -lkmod"
+	fi
+
 	filter-flags -fprefetch-loop-arrays
 	econf \
 		--with-rootprefix=/ \
-		--libdir=/usr/$(get_libdir) \
 		--libexecdir=/lib \
+		$myconf \
 		$(use_enable static-libs static) \
 		$(use_with selinux) \
 		$(use_enable debug) \

kostik87 ★★★★★
()
Ответ на: комментарий от fat_angel

Да собственно ни где, это я в своём локальном оверлее держу подправленные версии некоторых ebuild`ов, в частности udev новый и kmod.

Там добавлен флаг usr, который надо задействовать в случае отдельного usr и у kmod и у udev.

kostik87 ★★★★★
()

initramfs не нужен по той причине, что лишняя сущность и костыль при самосборном ядре

Почему костыль? Просто потому, что раньше не было, а теперь появилось? Эдак все что угодно костылем можно обозвать. И сам udev - костыль, потому что ядро не умеет самостоятельно создавать файлы устройств. И ядро — тоже костыль. В чем задача ядра? Дать аппаратно-независимую абстракцию ресурсов компьютера. Но стоп, разве это не задача BIOSа? Да, а значит ядро OS - это костыль который исправляет косяки биоса, на помойку его. Да и сам биос - тоже костыль, ибо пусть железяки предоставляют унифицированный доступ к своим ресурсам изначально. И вообще вся операционная система - один большой костыль. Процессор должен запускать программы самостоятельно, а если он этого без костылей не умеет, то он не нужен. Да и компьютер сам, тоже вобщем-то костыль. Фрэнк Герберт это еще 30 лет назад понял...

tl;dr: Короче ставь initramfs и не пудри себе мозги. Это вполне логичное решение, не намного более костыльное чем любое другое.

morse ★★★★★
()
Ответ на: комментарий от kostik87

Там добавлен флаг usr, который надо задействовать в случае отдельного usr и у kmod и у udev.

Это я понял. А оверлей где-нибудь в интернетах представлен?

fat_angel ★★★★★
() автор топика
Ответ на: комментарий от fat_angel

Нет. Я выкладывал эти патчи ещё для udev-181 в багзиллу, но их не принял мантейнер udev, по причине что это контрпродуктивно, т.к. в будущем запланировано слияние /bin и /usr/bin, /lib и /usr/lib, /lib64 и /usr/lib64, /sbin и /usr/sbin.

kostik87 ★★★★★
()
Ответ на: комментарий от fat_angel

создает initramfs только с тем что реально нужно

Gorthauer ★★★★★
()
Ответ на: комментарий от fat_angel
echo 'EXTRA_ECONF=-prefix /' >> /etc/portage/package.env/sys-apps/kmod

а вобще судя по рассылке работа над тем, чтобы сделать адекватное решение идёт

qnikst ★★★★★
()
Ответ на: комментарий от qnikst

С kmod, всё просто, относительно, но нужно ещё править секцию postinstall, которая создаёт символьные ссылки lsmod, rmmod, modprobe и прочее.

А при сборке udev переопределять переменные окружения, с указанием нового места расположения libkmod, т.к. путь по умолчанию /usr/lib.

kostik87 ★★★★★
()
Ответ на: комментарий от qnikst

echo 'EXTRA_ECONF=-prefix /' >> /etc/portage/package.env/sys-apps/kmod

А для удава такое же сделать не нужно?

работа над тем, чтобы сделать адекватное решение идёт

Это радует

fat_angel ★★★★★
() автор топика
Ответ на: комментарий от fat_angel

Без него грузится? Нет. А с ним грузится? Да. Значит не лишняя.

А вообще логика потрясает. Проверенное, одобренное мантэйнером решение мы называем костылем, и вместо этого накатываем кучу левых патчей из левых источников, и считаем это эталонной бескостыльной реализацией. И все почему? Потому что лень разбираться как собрать initramfs.

Думай об initramfs как о современной замене rootfs. Раньше rootfs содержала в себе все необходимые файлы для старта тачки. Теперь она больше этого не делает, ей нужна современная замена в виде initramfs. Если уж что и обзывать лишней сущностью в нынешнем положении дел, так это именно rootfs.

morse ★★★★★
()
Ответ на: комментарий от morse

Проверенное, одобренное мантэйнером решение мы называем костылем...

Майнтенер слил кодовую базу с systemd. Есть резонные сомнения в его адекватности.

sergv
()
Ответ на: комментарий от morse

Без него грузится? Нет.

УМВР ЧЯДНТ?

Думай об initramfs как о современной замене rootfs. … Если уж что и обзывать лишней сущностью в нынешнем положении дел, так это именно rootfs.

Видимо про KISS в этом мире уже никто не вспоминает…

fat_angel ★★★★★
() автор топика
Ответ на: комментарий от kostik87

Да видел я и уже все понял, спасибо.

Кстати не надо мне выкать.

fat_angel ★★★★★
() автор топика
Ответ на: комментарий от fat_angel

Без него грузится? Нет.

УМВР ЧЯДНТ?

Тогда о чем вообще тема?

Видимо про KISS в этом мире уже никто не вспоминает…

Ну да, накатить кучу патчей из левых источников, это ГОРАЗДО проще и понятнее чем сделать все согласно официальному руководству.

morse ★★★★★
()
Ответ на: комментарий от morse

Патчи выше, в частности, возвращают функционал, который убрали из-за поттеринга и его systemd, которая нормально не грузится с отдельным usr.

kostik87 ★★★★★
()
Ответ на: комментарий от fat_angel

насколько я понимаю не нужно, т.к. все либы система будет знать, где лежат либы комода.

да должен сказать, что сам я предпочел использовать initramfs, так что это решение на свой страх и риск, хотя больших проблем быть не должно, или удев не поставится, или будет работать :)

qnikst ★★★★★
()
Ответ на: комментарий от morse

Тогда о чем вообще тема?

Так это у меня пока все работает, а вот если я надумаю обновится после очередной дыры в ядре, то все работать перестанет и придется мудохаться с этим initramfs.

Ну да, накатить кучу патчей из левых источников, это ГОРАЗДО проще и понятнее чем сделать все согласно официальному руководству.

Если в официальном руководстве написана херня, то я не желаю ему следовать.

fat_angel ★★★★★
() автор топика
Ответ на: комментарий от kostik87

хм.. не подумал, возможно это действительно так.

qnikst ★★★★★
()
Ответ на: комментарий от fat_angel

Кстати у тебя separate /usr часом не broken?

На моем ноуте никаких separate /usr ясен хрен нету, а домашний сервер мне пока обновлять лень (там генту, software raid, и куча веселья). Но уверяю, что когда у меня руки до него таки дойдут, я если надо будет создам initramfs и думать про него забуду.

Кстати я с нетерпением жду прихода systemd и wayland в стабильную ветку, юзаю gnome3 и pulseaudio, и совершенно не заморачиваюсь на счет великих идей.

morse ★★★★★
()
Ответ на: комментарий от morse

Кстати я с нетерпением жду прихода systemd и wayland в стабильную ветку, юзаю gnome3 и pulseaudio, и совершенно не заморачиваюсь на счет великих идей.

Любитель подножного корма?

Прелесть никсов для многих людей и меня в том числе заключается в возможности выбора. Когда такой возможности тебя лишают это печально…

fat_angel ★★★★★
() автор топика
Ответ на: комментарий от morse

Думай об initramfs как о современной замене rootfs. Раньше rootfs содержала в себе все необходимые файлы для старта тачки. Теперь она больше этого не делает, ей нужна современная замена в виде initramfs.

Ты наркоман чтоли? initramfs при самосборном ядре — костыль. Чтобы назвать / deprecated, нужно сильно упороться. Где по-твоему должен лежать sh и, самое главное, libc.so? Чего мелочиться-то? Давайте сразу libc.so двинем в /usr/lib!

Нет, еще лучше: запретим монтирование в дерево каталогов и сделаем корневые директории /a, /b, /c и так далее, которые монтируются автоматам и соответствуют физическим устройствам! Годков через 5 реально к такому говну придут.

red_eyed_peguin
()
Ответ на: комментарий от morse

Кстати я с нетерпением жду прихода systemd и wayland в стабильную ветку, юзаю gnome3 и pulseaudio, и совершенно не заморачиваюсь на счет великих идей.

Мог бы сразу перейти на винду, что уж там мелочиться.

O02eg ★★★★★
()
Ответ на: комментарий от GotF

Мсье не слышал про LVM?

И что LVM? Выносишь rootfs на маленький физический рздел (у меня к примеру он всего то 256 Мб), а все остальное на LVM и initramfs не нужен.

fat_angel ★★★★★
() автор топика
Ответ на: комментарий от GotF

Мсье не слышал про LVM?

Мосье уже года 4 как живет на LVM и держит / на 2-гигабайтном non-LVM разделе, потому что мосье не мудак и предпочитает bash-консоль вместо kernel panic.

red_eyed_peguin
()
Ответ на: комментарий от fat_angel

Читал. Не умеет LVM пока, что для меня важно.

Он, увы, ещё много чего не умеет.

O02eg ★★★★★
()
Ответ на: комментарий от GotF

Это ты типа пошутил, правда?

Это мосье не ориентируется, что будет, если не получится сделать pivot_root из initramfs-образа. Даже если будет busybox, bash-консоль для мосье все равно предпочтительней.

red_eyed_peguin
()
Ответ на: комментарий от red_eyed_peguin

Это мосье не ориентируется, что будет, если не получится сделать pivot_root из initramfs-образа.

Ориентируется, не волнуйся :) У меня такое бывало, обычно бизибокса хватало для починки и продолжения загрузки.

GotF ★★★★★
()
Ответ на: комментарий от red_eyed_peguin

Потому что initramfs не нужен для работы.

Я уже писал ранее что я думаю по этому поводу:

Без него грузится? Нет. А с ним грузится? Да.

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

morse ★★★★★
()
Ответ на: комментарий от morse

Без него грузится? Нет.

Может уже хватит обманывать?

fat_angel ★★★★★
() автор топика
Ответ на: комментарий от GotF

Ориентируется, не волнуйся :)

Я имел в виду себя. Что-то я не подумал, что в случае initramfs rootfs монтируется и повода для паники нет.

red_eyed_peguin
()
Ответ на: комментарий от morse

Я не знаю какие еще бывают критерии ненужности

У меня нет initramfs, без него все замечательно (и очень быстро) грузится. Вывод: НЕ НУЖНО. Зачем мне навязывают это говно, предназначенное для загрузки во враждебных условиях?

На самом деле, я никак не могу понять, какого хера kmod запихнули в /usr. Вот это реально дикость.

red_eyed_peguin
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.