[РЕШЕНО]FlashStick и Gentoo[ЧАСТИЧНО]
Доброго времени суток. Решил установить себе на флешку gentoo. Разбил диск на два раздела :
/dev/sdb1 1400MB- vfat
/dev/sdb2 600MB - ext2.
Через catalyst сделал свою сборку Livecd, настроил и закинул на флешку. Ядро собрал через genkernel. Вот grub.conf:
title Load Gentoo On the Flash ( GentooOF =) ) root (hd0,1) kernel /boot/kernel-genkernel-x86-2.6.27-gentoo-r10 vga=0x317 real_root=/dev/sdb2 ramdisk_size=8192 root=/dev/ram0 ro splash=verbose console=tty1 quiet initrd /boot/initramfs-genkernel-x86-2.6.27-gentoo-r10
Вкомпилил нужное в ядро(рамдиск, фс). Вот fstab, хотя он здесь не при чём:
/dev/sdb2 / ext2 noatime 0 1
/dev/cdrom /mnt/cdrom auto noauto,ro 0 0
shm /dev/shm tmpfs nodev,nosuid,noexec 0 0
Теперь в чём проблема. Проблема самая насущная :
Device /dev/sdb2 is not a valid root device. - Раз !(5)!
Could not find any root device in . - Следом !(5)!
Неспав пару ночей и перелопатив все возможные форумы нашёл след.:
http://eee-pc.ru/forum/viewtopic.php?id=617&p=2. На этом форуме один человек(как бы мне хотелось чем-то заменить это слово) нашёл решение. initramfs монтирует rootfs до того как ядро его определит. Он всё сделал, исправил, настроил, оно всё заработало, но решение не выложил.
Рылся в init скрипте. Нашёл то что нужно. Возможно смог бы что-то исправить да только после даже тривиальных изменений в init-скрипте при передаче его ядру через init=/linuxrc(положил его в корень /dev/sdb2) ядро никак не реагирует. Очень прошу помощи. Заранее спасибо.
Ах да : если после !(5)! ввести /dev/sdb2 всё нормально грузится.
- Для комментирования войдите или зарегистрируйтесь

Что нет никаких идей ? Никто
Что нет никаких идей ? Никто никогда не передавал ядру свой init-скрипт ?
Вообщем как всегда... По
Вообщем как всегда... По этому документу http://en.gentoo-wiki.com/wiki/Initramfs научился создавать свой образ ramfs. Взял за основу проблемный образ. Всё что нужно это правильно подправить init-скрипт(пробовал изменять - работает). Вот этот скрипт: http://pastebin.com/m1a0a37d8
Наивно конечно с моей стороны, но всё же эта секция # Determine root device
отвечает за root device. Где-то там проблема...
#Спустя какое-то время(минут15)
В том скрипте sleep 15 добавил я. Это решает проблему. Конечно надо его уменьшить до необходимого,нужного и желаемого времени. Но всё же хотелось бы решить проблему иным путём. Хотя тот факт что ядро ещё не загрузило необходимый код иным путём может решить и нельзя.
PS::.. Напишите хоть кто-то что-нибудь, а то я сомневаюсь что кто-то читает.
Выкладываю здесь содержимое init-скрипта(остальные инструкции можно получить прочитав топик):
#!/bin/sh . /etc/initrd.defaults . /etc/initrd.scripts splash() { return 0 } [ -e /etc/initrd.splash ] && . /etc/initrd.splash # Clean input/output exec >${CONSOLE} <${CONSOLE} 2>&1 if [ "$$" != '1' ] then echo '/linuxrc has to be run as the init process as the one' echo 'with a PID of 1. Try adding init="/linuxrc" to the' echo 'kernel command line or running "exec /linuxrc".' exit 1 fi mount -t proc proc /proc >/dev/null 2>&1 mount -o remount,rw / >/dev/null 2>&1 # Set up symlinks /bin/busybox --install -s if [ "$0" = '/init' ] then [ -e /linuxrc ] && rm /linuxrc if [ -e /bin/lvm ] then ln -s /bin/lvm /bin/vgscan ln -s /bin/lvm /bin/vgchange fi fi quiet_kmsg CMDLINE=`cat /proc/cmdline` # Scan CMDLINE for any specified real_root= or cdroot arguments REAL_ROOT='' FAKE_ROOT='' REAL_ROOTFLAGS='' CRYPT_SILENT=0 for x in ${CMDLINE} do case "${x}" in real_root\=*) REAL_ROOT=`parse_opt "${x}"` ;; root\=*) FAKE_ROOT=`parse_opt "${x}"` ;; subdir\=*) SUBDIR=`parse_opt "${x}"` ;; real_init\=*) REAL_INIT=`parse_opt "${x}"` ;; init_opts\=*) INIT_OPTS=`parse_opt "${x}"` ;; # Livecd options cdroot) CDROOT=1 ;; cdroot\=*) CDROOT=1 CDROOT_DEV=`parse_opt "${x}"` ;; cdroot_type\=*) CDROOT_TYPE=`parse_opt "${x}"` ;; # Start livecd loop, looptype options loop\=*) LOOP=`parse_opt "${x}"` ;; looptype\=*) LOOPTYPE=`parse_opt "${x}"` ;; # Start Volume manager options dolvm) USE_LVM_NORMAL=1 ;; dolvm2) bad_msg 'Using dolvm2 is deprecated, use dolvm, instead.' USE_LVM_NORMAL=1 ;; domdadm) USE_MDADM=1 ;; dodmraid) USE_DMRAID_NORMAL=1 ;; dodmraid\=*) DMRAID_OPTS=`parse_opt "${x}"` USE_DMRAID_NORMAL=1 ;; doevms) USE_EVMS_NORMAL=1 ;; doevms2) bad_msg 'Using doevms2 is deprecated, use doevms, instead.' USE_EVMS_NORMAL=1 ;; # Debug Options debug) DEBUG='yes' ;; # Scan delay options scandelay\=*) SDELAY=`parse_opt "${x}"` ;; scandelay) SDELAY=10 ;; # Module no-loads doload\=*) MDOLIST=`parse_opt "${x}"` MDOLIST="`echo ${MDOLIST} | sed -e 's/,/ /g'`" ;; nodetect) NODETECT=1 ;; noload\=*) MLIST=`parse_opt "${x}"` MLIST="`echo ${MLIST} | sed -e 's/,/ /g'`" export MLIST ;; # Redirect output to a specific tty CONSOLE\=*\|console\=*) CONSOLE=`parse_opt "${x}"` exec >${CONSOLE} <${CONSOLE} 2>&1 ;; # /dev/md lvmraid\=*) RAID_DEVICES="`parse_opt ${x}`" RAID_DEVICES="`echo ${RAID_DEVICES} | sed -e 's/,/ /g'`" ;; part\=*) MDPART=`parse_opt "${x}"` ;; # NFS ip\=*) IP=`parse_opt "${x}"` ;; nfsroot\=*) NFSROOT=`parse_opt "${x}"` ;; crypt_root\=*) CRYPT_ROOT=`parse_opt "${x}"` ;; crypt_swap\=*) CRYPT_SWAP=`parse_opt "${x}"` ;; root_key\=*) CRYPT_ROOT_KEY=`parse_opt "${x}"` ;; root_keydev\=*) CRYPT_ROOT_KEYDEV=`parse_opt "${x}"` ;; swap_key\=*) CRYPT_SWAP_KEY=`parse_opt "${x}"` ;; swap_keydev\=*) CRYPT_SWAP_KEYDEV=`parse_opt "${x}"` ;; real_resume\=*) REAL_RESUME=`parse_opt "${x}"` ;; noresume) NORESUME=1 ;; crypt_silent) CRYPT_SILENT=1 ;; real_rootflags\=*) REAL_ROOTFLAGS=`parse_opt "${x}"` ;; keymap\=*) keymap=`parse_opt "${x}"` ;; esac done if [ -z "${REAL_ROOT}" -a \( "${CDROOT}" -eq 0 \) -a \( "${FAKE_ROOT}" != "/dev/ram0" \) ] then REAL_ROOT="${FAKE_ROOT}" fi splash 'init' detect_sbp2_devices cmdline_hwopts # Mount sysfs mount_sysfs # Setup hotplugging for firmware loading setup_hotplug # Load modules listed in MY_HWOPTS if /lib/modules exists for the running kernel if [ -z "${DO_modules}" ] then good_msg 'Skipping module load; disabled via commandline' elif [ -d "/lib/modules/${KV}" ] then good_msg 'Loading modules' # Load appropriate kernel modules if [ "${NODETECT}" != '1' ] then for modules in ${MY_HWOPTS} do modules_scan ${modules} done fi # Always eval doload=... modules_load ${MDOLIST} else good_msg 'Skipping module load; no modules in the initrd!' fi # Delay if needed for USB hardware sdelay # Start device manager start_dev_mgr # Setup md device nodes if they dont exist setup_md_device # Scan volumes startVolumes setup_keymap # Initialize LUKS root device except for livecd's if [ "${CDROOT}" != 1 ] then startLUKS if [ "${NORESUME}" != '1' ] && [ -n "${REAL_RESUME}" ] then swsusp_resume # suspend_resume tuxonice_resume fi fi mkdir -p "${NEW_ROOT}" CHROOT="${NEW_ROOT}" # Run debug shell if requested rundebugshell if [ "${CDROOT}" = '1' ] then good_msg "Making tmpfs for ${NEW_ROOT}" mount -t tmpfs tmpfs "${NEW_ROOT}" for i in dev mnt mnt/cdrom mnt/livecd mnt/key tmp tmp/.initrd mnt/gentoo sys do mkdir -p "${NEW_ROOT}/${i}" chmod 755 "${NEW_ROOT}/${i}" done [ ! -e "${NEW_ROOT}/dev/null" ] && mknod "${NEW_ROOT}"/dev/null c 1 3 [ ! -e "${NEW_ROOT}/dev/console" ] && mknod "${NEW_ROOT}"/dev/console c 5 1 # For SGI LiveCDs ... if [ "${LOOPTYPE}" = "sgimips" ] then [ ! -e "${NEW_ROOT}/dev/sr0" ] && mknod "${NEW_ROOT}/dev/sr0" b 11 0 [ ! -e "${NEW_ROOT}/dev/loop0" ] && mknod "${NEW_ROOT}/dev/loop0" b 7 0 fi # Required for splash to work. Not an issue with the initrd as this # device isn't created there and is not needed. if [ -e /dev/tty1 ] then [ ! -e "${NEW_ROOT}/dev/tty1" ] && mknod "${NEW_ROOT}/dev/tty1" c 4 1 fi if [ "${REAL_ROOT}" != "/dev/nfs" ] && [ "${LOOPTYPE}" != "sgimips" ] then bootstrapCD fi if [ "${REAL_ROOT}" = '' ] then echo -n -e "${WARN}>>${NORMAL}${BOLD} No bootable medium found. Waiting for new devices" COUNTER=0 while [ ${COUNTER} -lt 3 ]; do sleep 3 echo -n '.' let COUNTER=${COUNTER}+1 done sleep 1 echo -e "${NORMAL}" bootstrapCD fi if [ "${REAL_ROOT}" = '' ] then # Undo stuff umount "${NEW_ROOT}/dev" 2>/dev/null umount "${NEW_ROOT}/sys" 2>/dev/null umount /sys 2>/dev/null umount "${NEW_ROOT}" rm -rf "${NEW_ROOT}/*" bad_msg 'Could not find CD to boot, something else needed!' CDROOT=0 fi fi # Determine root device good_msg 'Determining root device...Sleeping 15 sec first =)' while true do sleep 15 while [ "${got_good_root}" != '1' ] do case "${REAL_ROOT}" in LABEL\=*|UUID\=*) ROOT_DEV="" retval=1 if [ "${retval}" -ne '0' ]; then ROOT_DEV=`findfs "${REAL_ROOT}" 2>/dev/null` retval=$? fi if [ "$retval" -ne '0' ]; then ROOT_DEV=`busybox findfs "${REAL_ROOT}" 2>/dev/null` retval=$? fi if [ "${retval}" -ne '0' ]; then ROOT_DEV=`blkid -t "${REAL_ROOT}" | cut -d ":" -f 1 2>/dev/null` retval=$? fi if [ "${retval}" -eq '0' ] && [ -n "${ROOT_DEV}" ]; then good_msg "Detected real_root=${ROOT_DEV}" REAL_ROOT="${ROOT_DEV}" else whereis "REAL_ROOT" "root block device" got_good_root=0 continue fi ;; esac if [ "${REAL_ROOT}" = '' ] then # No REAL_ROOT determined/specified. Prompt user for root block device. whereis "REAL_ROOT" "root block device" got_good_root=0 # Check for a block device or /dev/nfs elif [ -b "${REAL_ROOT}" ] || [ "${REAL_ROOT}" = "/dev/nfs" ] then got_good_root=1 else bad_msg "Block device ${REAL_ROOT} is not a valid root device..." REAL_ROOT="" got_good_root=0 fi done if [ "${CDROOT}" = 1 -a "${got_good_root}" = '1' -a "${REAL_ROOT}" != "/dev/nfs" ] then # CD already mounted; no further checks necessary break elif [ "${LOOPTYPE}" = "sgimips" ] then # sgimips mounts the livecd root partition directly # there is no isofs filesystem to worry about break else good_msg "Mounting root..." # Try to mount the device as ${NEW_ROOT} if [ "${REAL_ROOT}" = '/dev/nfs' ]; then findnfsmount else # mount ro so fsck doesn't barf later if [ "${REAL_ROOTFLAGS}" = '' ]; then mount -o ro ${REAL_ROOT} ${NEW_ROOT} else good_msg "Using mount -o ro,${REAL_ROOTFLAGS}" mount -o ro,${REAL_ROOTFLAGS} ${REAL_ROOT} ${NEW_ROOT} fi fi # If mount is successful break out of the loop # else not a good root and start over. if [ "$?" = '0' ] then if [ -d ${NEW_ROOT}/dev -a -x ${NEW_ROOT}/sbin/init ] then break else bad_msg "The filesystem mounted at ${REAL_ROOT} does not appear to be a valid /, try again" got_good_root=0 REAL_ROOT='' fi else bad_msg "Could not mount specified ROOT, try again" got_good_root=0 REAL_ROOT='' fi fi done # End determine root device #verbose_kmsg # If CD root is set determine the looptype to boot if [ "${CDROOT}" = '1' ] then good_msg 'Determining looptype ...' cd "${NEW_ROOT}" # Find loop and looptype [ -z "${LOOP}" ] && find_loop [ -z "${LOOPTYPE}" ] && find_looptype cache_cd_contents # If encrypted, find key and mount, otherwise mount as usual if [ -n "${CRYPT_ROOT}" ] then CRYPT_ROOT_KEY="$(head -n 1 ${NEW_ROOT}/mnt/cdrom/livecd)" CRYPT_ROOT='/dev/loop0' good_msg 'You booted an encrypted livecd' "${CRYPT_SILENT}" losetup /dev/loop0 "${NEW_ROOT}/mnt/cdrom/${LOOPEXT}${LOOP}" test_success 'Preparing loop filesystem' startLUKS case ${LOOPTYPE} in normal) MOUNTTYPE="ext2" ;; *) MOUNTTYPE="${LOOPTYPE}" ;; esac mount -t "${MOUNTTYPE}" -o ro /dev/mapper/root "${NEW_ROOT}/mnt/livecd" test_success 'Mount filesystem' FS_LOCATION='mnt/livecd' # Setup the loopback mounts, if unencrypted else if [ "${LOOPTYPE}" = 'normal' ] then good_msg 'Mounting loop filesystem' mount -t ext2 -o loop,ro "${NEW_ROOT}/mnt/cdrom/${LOOPEXT}${LOOP}" "${NEW_ROOT}/mnt/livecd" test_success 'Mount filesystem' FS_LOCATION='mnt/livecd' elif [ "${LOOPTYPE}" = 'squashfs' ] then good_msg 'Mounting squashfs filesystem' mount -t squashfs -o loop,ro "${NEW_ROOT}/mnt/cdrom/${LOOPEXT}${LOOP}" "${NEW_ROOT}/mnt/livecd" test_success 'Mount filesystem' FS_LOCATION='mnt/livecd' elif [ "${LOOPTYPE}" = 'gcloop' ] then good_msg 'Mounting gcloop filesystem' echo ' ' | losetup -E 19 -e ucl-0 -p0 "${NEW_ROOT}/dev/loop0" "${NEW_ROOT}/mnt/cdrom/${LOOPEXT}${LOOP}" test_success 'losetup the loop device' mount -t ext2 -o ro "${NEW_ROOT}/dev/loop0" "${NEW_ROOT}/mnt/livecd" test_success 'Mount the losetup loop device' FS_LOCATION='mnt/livecd' elif [ "${LOOPTYPE}" = 'zisofs' ] then FS_LOCATION="mnt/cdrom/${LOOPEXT}${LOOP}" elif [ "${LOOPTYPE}" = 'noloop' ] then FS_LOCATION='mnt/cdrom' elif [ "${LOOPTYPE}" = 'sgimips' ] then # getdvhoff finds the starting offset (in bytes) of the squashfs # partition on the cdrom and returns this offset for losetup # # All currently supported SGI Systems use SCSI CD-ROMs, so # so we know that the CD-ROM is usually going to be /dev/sr0. # # We use the value given to losetup to set /dev/loop0 to point # to the liveCD root partition, and then mount /dev/loop0 as # the LiveCD rootfs good_msg 'Locating the SGI LiveCD Root Partition' echo ' ' | \ losetup -o $(getdvhoff "${NEW_ROOT}${REAL_ROOT}" 0) \ "${NEW_ROOT}${CDROOT_DEV}" \ "${NEW_ROOT}${REAL_ROOT}" test_success 'losetup /dev/sr0 /dev/loop0' good_msg 'Mounting the Root Partition' mount -t squashfs -o ro "${NEW_ROOT}${CDROOT_DEV}" "${NEW_ROOT}/mnt/livecd" test_success 'mount /dev/loop0 /' FS_LOCATION='mnt/livecd' fi fi # Unpacking additional packages from NFS mount # This is useful for adding kernel modules to /lib # We do this now, so that additional packages can add whereever they want. if [ "${REAL_ROOT}" = '/dev/nfs' ] then if [ -e "${CHROOT}/mnt/cdrom/add" ] then for targz in `ls ${CHROOT}/mnt/cdrom/add/*.tar.gz` do tarname=`basename ${targz}` good_msg "Adding additional package ${tarname}" (cd ${CHROOT} ; /bin/tar -xzf ${targz}) done fi fi good_msg "Copying read-write image contents to tmpfs" # Copy over stuff that should be writable (cd "${NEW_ROOT}/${FS_LOCATION}"; cp -a ${ROOT_TREES} "${NEW_ROOT}") # Now we do the links. for x in ${ROOT_LINKS} do if [ -L "${NEW_ROOT}/${FS_LOCATION}/${x}" ] then ln -s "`readlink ${NEW_ROOT}/${FS_LOCATION}/${x}`" "${x}" 2>/dev/null else # List all subdirectories of x find "${NEW_ROOT}/${FS_LOCATION}/${x}" -type d 2>/dev/null | while read directory do # Strip the prefix of the FS_LOCATION directory="${directory#${NEW_ROOT}/${FS_LOCATION}/}" # Skip this directory if we already linked a parent directory if [ "${curent_parrent}" != '' ]; then var=`echo "${directory}" | grep "^${curent_parrent}"` if [ "${var}" != '' ]; then continue fi fi # Test if the directory exists already if [ -e "/${NEW_ROOT}/${directory}" ] then # It does exist, link all the individual files for file in `ls /${NEW_ROOT}/${FS_LOCATION}/${directory}` do if [ ! -d "/${NEW_ROOT}/${FS_LOCATION}/${directory}/${file}" ] && [ ! -e "${NEW_ROOT}/${directory}/${file}" ]; then ln -s "/${FS_LOCATION}/${directory}/${file}" "${directory}/${file}" 2> /dev/null fi done else # It does not exist, make a link to the livecd ln -s "/${FS_LOCATION}/${directory}" "${directory}" 2>/dev/null current_parent="${directory}" fi done fi done if [ "${DO_slowusb}" ] || [ "${FORCE_slowusb}" ] then sleep 10 fi mkdir initrd proc tmp sys 2>/dev/null chmod 1777 tmp #UML=`cat /proc/cpuinfo|grep UML|sed -e 's|model name.*: ||'` #if [ "${UML}" = 'UML' ] #then # # UML Fixes # good_msg 'Updating for uml system' #fi # Let Init scripts know that we booted from CD export CDBOOT CDBOOT=1 check_slowusb if [ "${DO_slowusb}" ] || [ "${FORCE_slowusb}" ] then sleep 10 fi fi # Execute script on the cdrom just before boot to update things if necessary cdupdate if [ "${SUBDIR}" != '' -a -e "${CHROOT}/${SUBDIR}" ] then good_msg "Entering ${SUBDIR} to boot" CHROOT="${CHROOT}/${SUBDIR}" fi verbose_kmsg # There used to be some initrd/2.4 code here, but it's gone now : echo -ne "${GOOD}>>${NORMAL}${BOLD} Booting (initramfs)${NORMAL}" if [ ! -e "${CHROOT}/dev/console" ] || [ ! -e "${CHROOT}/dev/null" ] then echo -ne "${BAD}>>${NORMAL}${BOLD} ERROR: your /dev is missing files required to boot (console and null)${NORMAL}" elif [ -e /etc/initrd.splash -a ! -e "${CHROOT}/dev/tty1" ] then echo -ne "${BAD}>>${NORMAL}${BOLD} ERROR: your /dev is missing tty1, which is required for splash${NORMAL}" fi cd "${CHROOT}" mkdir "${CHROOT}/proc" "${CHROOT}/sys" 2>/dev/null echo -ne "${BOLD}.${NORMAL}" umount /sys || echo '*: Failed to unmount the initrd /sys!' umount /proc || echo '*: Failed to unmount the initrd /proc!' echo -e "${BOLD}.${NORMAL}" exec switch_root -c "/dev/console" "${CHROOT}" "${REAL_INIT:-/sbin/init}" "${INIT_OPTS}" # If we get here, something bad has happened splash 'verbose' echo 'A fatal error has probably occured since /sbin/init did not' echo 'boot correctly. Trying to open a shell...' echo exec /bin/bash exec /bin/sh exec /bin/ash exec shНИКТО НИКОГДА НЕ ОСТАВЛЯЙТЕ РЕШЕННЫЕ ПРОБЛЕМЫ БЕЗ ПРИМЕРОВ ИЛИ ОТВЕТОВ(как сделал один товарищ). И даже намерения типа : "Предлагаю создать статью на вики по этой проблеме всем дружно" или "Могу прикрепить если надо" не устоят перед зыбким песком времени =). Когда кому-то будет надо - будет просто поздно уже и т.д.
Я читаю, но умного
Я читаю, но умного посоветовать не могу пока (-:Е
Разве что вот монтировать устройство по uuid или метке тома. Поможет ли проблеме, не знаю (хотя возможно), но лучше будет точно. Мало ли как устройства определятся
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
Дело то не в определении
Дело то не в определении устройств. Самый первый пост: "если потом снова ввести тоже имя /dev/sdb2 всё работает..." - в этом духе.
Про uuid и label другая история. Хочу так сделать, только вот образ у меня маленький, busybox там, mdev вместо udev и диски не определяются по этим параметрам.
а если при загрузке флешка
а если при загрузке флешка определяется, как /dev/sda2, а не /dev/sdb2?.
То она не загрузится, в целом
То она не загрузится, в целом ошибка такая же, но по сути определённо другая. В 1-ом случае ядро не загрузило нужный код, во втором не верно указан раздел. Чтобы использовать UUID, LABEL и т.д., я хочу попробовать mkinitcpio из Arch'a.
Кто-нибудь его в Gentoo встречал ?
Вообще, думется, вполне можно
Вообще, думется, вполне можно написать ебилд по Арховому PKGBUILD'у.
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
Копания в пакетах Acrh'a,
Копания в пакетах Acrh'a, установка "eдва живого" mkinitcpio ни к чему не привели. Эх, если б как-нибудь udev засунуть в initramfs - проблема была б решена.
Вообще вроде можно. Судя по
Вообще вроде можно. Судя по тому, что гугль вываливает в ответ на "gentoo udev initramfs"
Вот тут какая-то подобная штука вроде делается: http://ru.gentoo-wiki.com/wiki/HOWTO_Multipath_boot_support
По-моему, udev в initrd на gentoo-дисках водится...
Сейчас не могу разрыть свои мысли, бежать пора, так что вывалил "в сыром виде" (-:Е
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
Спасибо, находил такое. С
Спасибо, находил такое. С первого взгляда это штука немного для другого. Но теперь уж разбирусь с ней полностью, после вашего совета.
Да, конечно, для другого. Но
Да, конечно, для другого. Но мне кажется, оттуда можно почерпнуть косвенной информации.
И поразбираться, как делается initrd для MinimalCD, мне кажется, стоит.
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
Согласен. Так же разберу по
Согласен. Так же разберу по кусочкам mkinitcpio, там поддержка udev заявлена как одна из достоинств над initramfs. Делать initrd и initramfs не сложно. Есть соответсвующие статьи - одна на opennet.ru, вторая на en.gentoo-wiki.com. Я уже засовывал udev в initramfs, но по-быстрому в надежде на удачу. Не знаю даже как его инициализировать(вдруг кто-то подскажет как) и зависит ли он от каких-либо либ.
Всё гениальное просто
Оказалось гораздо проще. Хоть я и разобрался почти с mkinitcpio(там всё на bash'e и к тому же по модулям разбито: udev..base..etc).
Чтобы включить поддержку UUID, LABEL у genkernel, точнее у initramfs достаточно добавить опцию --disklabe genkernel'y(это включит в initramfs файл blkid, что и поможет определить LABEL, UUID) ТЧК
И теперь монтируется
И теперь монтируется правильно? Проблема, описанная в заголовке темы, решена? Я немного запутался (-:Е
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
Да, теперь монтируется по
Да, теперь монтируется по real_root=LABEL={LABEL}.
Но вот проблема с init скриптом, которому нужен перед монтированием `sleep 3` решена частично, ибо думаю что должен быть более разумный способ.
initramfs
А не знаете ли, как можно включить файл blkid в самопальный initramfs?
Я не пользуюсь genkernel, а собираю ядра "вручную", в .config не
нашёл такого файла, где сие сокровище лежит? Хотелось бы в grub'е
прописать root по UUID'у. С самосборным ведром такого сделать мне
не удалось.
Вы же используете initramfs
Вы же используете initramfs или initrd ? Без них не выйдет. И нужен ещё скрипт init для initramfs или ... из genkernel'a(он его генерирует). Можно просто запустить genkernel --no-clean --disklabel initrd. Получить образ с blkid. Добавить поддержку ramfs в ядро и готово.
И разве такого монтированию по дефолту нет(не работает) ?
initramfs
Использую initramfs, который я создал сам, благодаря Вашей ссылке:
http://en.gentoo-wiki.com/wiki/Initramfs
Поддержка ramfs в ядре у меня всегда.
Вот только blkid как получить в моём initramfs - не знаю.
Подозреваю, что нужно удава запускать в образе, хотя
mini_udev в init прописан. Пока мне больше ничего сказать.
Буду пробовать методом "ненаучного тыка" ;)
Добавлено:
Вопрос снят, initramfs с mini-udev определяет диски по UUID,
система загрузилась. Виной всему была просто опечатка в init-скрипте
образа. Теперь передо мной "мрачной тенью" всаёт вопрос:
как переделать скрипт splash_geninitramfs, чтобы он создавал
вменяемые загрузочные образа, или добавить сплаш-картинку в
своё творение, для "кульной" загрузки :D
Покапайтесь в содержимом
Покапайтесь в содержимом splash_ge*. Возможно надо просто скомпоновать его с образом initramfs(так они оба образы ramfs). Вообще всё это делается командой genkernel --splash=THEME --splash-res=THEME_RES --disk-label --no-clean initrd и добавить в образ темы другие, если нужно. Поддержка будет не только LABEL, но и UUID. Ядро компилиться не будет, genkernel пакет маленький.
initramfs
Всё получилось, спасибо Вам за статью и помощь.
Добавил картинку с помощью splash_geninitramfs в свой загрузочный образ.
Загрузка теперь "кулль", root грузится по UUID, осталось скрипт наваять,
чтобы "вдрючную" это не делать каждый раз, ибо - быстро надоест и забудется ;)
Чтож, буду пробовать, хотя в bash-скриптинге я - полный НОЛЬ... почти :)
Если получится что - выложу.
А что с
А что с Arch?
http://muhas.ru/?p=2 - вот здесь все доходчиво. Я уже сделал. Правда при загрузке на что-то ругается, но быстро идет дальше.
Моя мечта:
#emerge комьютер с генту
>>А что с Arch? Классный
>>А что с Arch?
Классный вопрос. Действительно, а что с ним ?
Одна проблема в том что я не использую arch. Находил и перечитал гораздо больше материала по теме. Ставил с горем пополам arch'евский mkinitcpio - запорол x86 систему в chroot'e.
Не всё так просто как хотелось бы. И мне не нужно чтобы на что-то ругалось.
Ну как тебе сказать, просто я
Ну как тебе сказать, просто я не знаю что такое "attamping" - в общем то это даже не "ругается", а что-то пытается сказать, но я такого слова просто не знаю. А может и ругается.
Моя мечта:
#emerge комьютер с генту
Простите, вы сейчас в
Простите, вы сейчас в адекватном состоянии души и тела ? По последнему посту сложилось впечатление что ты пишешь не в тот топик.