1

кто знает, где раздобыть список поддерживаемых загрузочных опций для initrd (те что передаются в загрузчике в cmdline ядра)?

Цель  — добавление opensuse на мультизагрузочную флешку.

95% процентов проблем находятся между клавиатурой и стулом.

2 (31.08.2014 17:01:17 отредактировано kostik87)

Fat-Zer пишет:

где раздобыть список поддерживаемых загрузочных опций для initrd

Из init сценария в initrd.

Создаёте директорию, куда будет распакова initrd и переходите в неё:

mkdir /tmp/initrd
cd /tmp/initrd

Распаковываете initrd:

unxz -c initrd | cpio -i -d -H newc

unxz использовать, если алгоритм сжатия lzma, алгоритм сжатия можно определить посредством утилиты file, может быть ещё gzip  или bzip, соответстветтно ungzip -с и unbzip2 или как-то так, в общем разберётесь, вы же модератор, должны понять.

Далее смотрите сценарий init, может находиться в корне initrd или в /sbin/init или /bin/init, так же возможно нюансы, что в Init подключаются какие-либо скрипты из /etc/, но там все просто и зачастую обработчик параметров ядра находится в самом init, выглядит примерно вот так: Как исключить модуль из загрузки (LiveCD)

+ открыть спойлер
# Parse command line options
for x in $(cat /proc/cmdline); do
    case $x in
    init=*)
        init=${x#init=}
        ;;
    root=*)
        ROOT=${x#root=}
        case $ROOT in
        LABEL=*)
            ROOT="${ROOT#LABEL=}"

            # support any / in LABEL= path (escape to \x2f)
            case "${ROOT}" in
            */*)
            if command -v sed >/dev/null 2>&1; then
                ROOT="$(echo ${ROOT} | sed 's,/,\\x2f,g')"
            else
                if [ "${ROOT}" != "${ROOT#/}" ]; then
                    ROOT="\x2f${ROOT#/}"
                fi
                if [ "${ROOT}" != "${ROOT%/}" ]; then
                    ROOT="${ROOT%/}\x2f"
                fi
                IFS='/'
                newroot=
                for s in $ROOT; do
                    newroot="${newroot:+${newroot}\\x2f}${s}"
                done
                unset IFS
                ROOT="${newroot}"
            fi
            esac
            ROOT="/dev/disk/by-label/${ROOT}"
            ;;
        UUID=*)
            ROOT="/dev/disk/by-uuid/${ROOT#UUID=}"
            ;;
        /dev/nfs)
            [ -z "${BOOT}" ] && BOOT=nfs
            ;;
        esac
        ;;
    rootflags=*)
        ROOTFLAGS="-o ${x#rootflags=}"
        ;;
    rootfstype=*)
        ROOTFSTYPE="${x#rootfstype=}"
        ;;
    rootdelay=*)
        ROOTDELAY="${x#rootdelay=}"
        case ${ROOTDELAY} in
        *[![:digit:].]*)
            ROOTDELAY=
            ;;
        esac
        ;;
    resumedelay=*)
        RESUMEDELAY="${x#resumedelay=}"
        ;;
    loop=*)
        LOOP="${x#loop=}"
        ;;
    loopflags=*)
        LOOPFLAGS="-o ${x#loopflags=}"
        ;;
    loopfstype=*)
        LOOPFSTYPE="${x#loopfstype=}"
        ;;
    cryptopts=*)
        cryptopts="${x#cryptopts=}"
        ;;
    nfsroot=*)
        NFSROOT="${x#nfsroot=}"
        ;;
    netboot=*)
        NETBOOT="${x#netboot=}"
        ;;
    ip=*)
        IP="${x#ip=}"
        ;;
    boot=*)
        BOOT=${x#boot=}
        ;;
    ubi.mtd=*)
        UBIMTD=${x#ubi.mtd=}
        ;;
    resume=*)
        RESUME="${x#resume=}"
        ;;
    resume_offset=*)
        resume_offset="${x#resume_offset=}"
        ;;
    noresume)
        noresume=y
        ;;
    panic=*)
        panic="${x#panic=}"
        case ${panic} in
        *[![:digit:].]*)
            panic=
            ;;
        esac
        ;;
    quiet)
        quiet=y
        ;;
    ro)
        readonly=y
        ;;
    rw)
        readonly=n
        ;;
    debug)
        debug=y
        quiet=n
        exec >/run/initramfs/initramfs.debug 2>&1
        set -x
        ;;
    debug=*)
        debug=y
        quiet=n
        set -x
        ;;
    break=*)
        break=${x#break=}
        ;;
    break)
        break=premount
        ;;
    blacklist=*)
        blacklist=${x#blacklist=}
        ;;
    netconsole=*)
        netconsole=${x#netconsole=}
        ;;
    BOOTIF=*)
        BOOTIF=${x#BOOTIF=}
        ;;
    hwaddr=*)
        BOOTIF=${x#BOOTIF=}
        ;;
    recovery)
        recovery=y
        ;;
    esac

Ну а дальше идут обработчики всего этого, если не понятно сразу что делает параметр, то нужно разбирать их.

Удачи.

3 (31.08.2014 18:43:14 отредактировано Fat-Zer)

я не такой наивный....
kostik87, это всё само собой сделал... но вот

 Консоль:
$ file init
init: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, BuildID[sha1]=b01d55a91d93f9cc9a888bb27d35d383470d3a63, stripped

нужны доки или хотя бы знать, из чего оно собирается...

[added]
Похоже init тут это родное сусёвоё поделие: https://github.com/openSUSE/linuxrc

95% процентов проблем находятся между клавиатурой и стулом.

4

Fat-Zer пишет:

Похоже init тут это родное сусёвоё поделие

А там уже не SystemD случаем? В Fedora LiveCD в initrd уже systemd, в таком случае нужно смотреть unit`ы systemd.

5

На LiveCD обычно список использованных опций ядерной командной строки можно добыть из {syslinux,isolinux}.cfg. Понимаю, что это совсем не то или не совсем то что нужно, но все же.

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Arch Linux/Xfce/Xiaomi Mi Notebook Pro 15.6 | Slackware64-current/Xfce/Lenovo G580

6 (31.08.2014 22:06:35 отредактировано aliaksei1818)

А чем это не устраивает?
Если вас интересует только загрузка, то загрузиться можно так:
для DVD:

linux /boot/$arch/loader/linux install=hd:/openSUSE-DVD.iso
initrd /boot/$arch/loader/initrd

Для livecd:

linux /boot/$arch/loader/linux isofrom_device=/dev/sdaX isofrom_system=/openSUSE-Live.iso
initrd /boot/$arch/loader/initrd

Смотрите в сторону kiwi

7

Fat-Zer пишет:

 Консоль:

$ file init
init: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, BuildID[sha1]=b01d55a91d93f9cc9a888bb27d35d383470d3a63, stripped

Что-то вы путаете, скачал iso OpenSuse Gnome 13.1, вот содержимое /init: http://pastebin.com/HQ3sGGGu

8

aliaksei1818 пишет:

А чем  это  не устраивает?

да это и искал... даже на страницу натыкался, но не думал, что дело в «install» +не нашёл в этом списке единственной опции, в которой доподлинно был уверен, что она поддерживается загрузчикам: showopts. Кстати, что это?
система загрузилась удовлетворительно...

aliaksei1818 пишет:

Смотрите в сторону  kiwi

на имя натыкался, пытался смотреть в её сторону, но так и не разобрался, что это... то ли приблуда для сборки живой/встроенной/виртуальной системы, то ли для сборки initrd, то ли часть системы начальной инициализации для хитрожопо-загружаемых систем...

yars пишет:

На LiveCD обычно список использованных опций ядерной командной строки можно добыть из {syslinux,isolinux}.cfg. Понимаю, что это совсем не то или не совсем то что нужно, но все же.

livedvd похоже загружается грубом только он как-то наизнанку вывернут и конфига в открытом виде так и не нашёл... после того как прогнал через unetbootin я конечно дёрнул из syslinux'а пару значений, но ничего интересного...

kostik87 пишет:

Что-то вы путаете, скачал iso OpenSuse Gnome 13.1, вот содержимое /init: http://pastebin.com/HQ3sGGGu

аа... значит livecd собирается совсем по-другому... уже догадывался об этом, но был не до конца уверен...

ЗЫ: для истории, полный menuentry выглядит так:

menuentry "OpenSUSE-13.1-DVD-i586" {
        set iso=/distro/openSUSE-13.1-DVD-i586.iso
        set loader=/boot/i386/loader
        loopback loop ${iso}
        linux (loop)${loader}/linux initrd=${loader}/initrd install=hd:${iso}
        initrd (loop)${loader}/initrd
}

ЗЗЫ: можно считать решено...

95% процентов проблем находятся между клавиатурой и стулом.

9 (07.09.2014 06:34:19 отредактировано aliaksei1818)

да это и искал... даже на страницу натыкался, но не думал, что дело в «install» +не нашёл в этом списке единственной опции, в которой доподлинно был уверен, что она поддерживается загрузчикам: showopts. Кстати, что это?

Опции передаваемые ядру на основе переменных киви. Именно эта наработка используется для сборки образов SUSE, а также предлагает сборку пользовательских проектов, используя susestudio. Это и есть основной причиной для записи образов на флеш носитель, используя собственную утилиту (imagewriter), а не подобные ей UNetbootin.