recover linux from grub

Новая порция новостей про обновление мира! Ура! Дождались! Я знаю что вы переживали получится ли у меня написать ещё один пост на эту тему или конец, мир разрушен?!

Но нет, мир был на грани, но спасён. Не сразу, но спасён! Так получилось что это уже не первое обновление мира на моём локалхосте поэтому вспоминая весёлый опыт предудущих обновлений иксы были исключены из загрузки, а то знаете как это бывает: компьютер загрузился, а клавиатура не работает. Грустновато.

# rc-update del xdm default

Но удар в спину пришёл от mysql. После смены профиля и переноса библиотек в другие места mysql блокировал загрузку и даже не умирал по ttl. Как вы понимаете загрузочной дискеты нет, а интерактивный режим в openrc не работает.

Интересный факт: оказывается, если у вас есть андроид, otg кабель и usb flash — есть некоторый шанс что у вас получится сделать загрузочную флешку прямо из андроида! Восхитительно!

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

# loading grub
# press `c` to open internal console
# read content of this file:
ls (hd0,1)/
cat (hd0,1)/recover_how_to

# return to entries list in grub and press `e`
# append to `linux` line `init=/bash/sh`
- linux /boot/grub_vmlinuz_new root=/dev/sda1 acpi_backlight=video
+ linux /boot/grub_vmlinuz_new root=/dev/sda1 acpi_backlight=video init=/bin/sh

# boot to shell and remount root
mount -o remount,rw /dev/sda1 /
mount -t proc none /proc

# do your recovery magic

#linux #recovery #update_world

2019.09.08 20:50

gentoo@localhost # emerge @world || fix blocks

И снова здравствуйте! Не прошло и трёх лет (а нет, прошло) как мне очень захотелось обновить всё что катится, а всё что не катится покатить и тоже обновить. Пришло время моей gentoo сделать очередной rolling realise, знаете ли.

Вот уже третьи сутки пойдут скооро, а к заветному сабжу ещё даже не удалось подступиться, всё всякие зависимости и их блокировки, знаете ли rolling release всё же!


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

emerge -1av $(equery depends <package-name> | sed 's/-[0-9]\{1,\}.*$//')

Допустим случилось невероятное и у вас возник блок пакета, типа emerge в общем-то и не против поставить уже новую версию пакета, но старая версия очень уж нужна другим пакетам:

!!! Multiple package instances within a single package slot have been pulled
!!! into the dependency graph, resulting in a slot conflict:

sys-libs/readline:0

  (sys-libs/readline-8.0_p1:0/8::gentoo, installed) pulled in by
    >=sys-libs/readline-8.0:0= required by (app-shells/bash-5.0_p11:0/0::gentoo, ebuild scheduled for merge)
    ^^                  ^^^^^^                                                                                                                                                        
    sys-libs/readline:0/8= required by (app-text/hunspell-1.7.0-r1:0/1.7::gentoo, installed)
                     ^^^^^                                                                                                      
    (and 10 more with the same problems)

  (sys-libs/readline-7.0_p5:0/7::gentoo, ebuild scheduled for merge) pulled in by
    sys-libs/readline:0/7=[abi_x86_32(-),abi_x86_64(-)] required by (dev-db/sqlite-3.29.0:3/3::gentoo, installed)
                     ^^^^^                                                                                                                           
    (and 12 more with the same problem)

Вариантов решения такой проблемы как бы три:

1) Удалить пакет и забыть, а emerge там как-нибудь сам что-нибудь сделает, но такое можно сделать сильно невсегда

2) Форсировать обновление одного пакета игнорируя зависимости, но тоже такое:

emerge -1av --nodeps sys-libs/readline:0

3) Обновить вручную все те пакеты что требуют старую версию пакета. Вот именно тут приходит на пользу строка упомянутая выше. Она, конечно, не обновляет все пакеты которые требуют старую версию, зато она просто обновляет все пакеты которым нужен указанный пакет. ВО-С-ХИ-ТИ-ТЕ-ЛЬ-НО:

emerge -1av $(equery depends sys-libs/readline:0 | sed 's/-[0-9]\{1,\}.*$//')

Случаются удивительные курьезы с версиями пакетов, например вот мне рассказывают что мой текущий пакет очень-очень устаревший, нужно очень-очень срочно его обновить:

- sys-libs/binutils-libs-2.32::gentoo (masked by: package.mask)
# If you still use one of these old toolchain packages, please upgrade (and
# switch the compiler / the binutils) ASAP. If you need them for a specific
# (isolated) use case, feel free to unmask them on your system.

Но на что же нам предлагают его обновить то?

[ebuild     U  ] sys-libs/binutils-libs-2.32-r1:0/2.32::gentoo [2.32:0/2.32::gentoo] USE="nls -64-bit-bfd -multitarget -static-libs" ABI_X86="32 (64) (-x32)" 20,431 KiB

Ага, то есть 2.32 плохо, а вот 2.32-r1 — это прям вот то что нужно, на острие!

Причём сам пакет замаскирован:

If you still use one of these old toolchain packages, please upgrade (and switch the compiler / the binutils) ASAP.

Affected packages: <sys -devel/gcc-5.4>, <sys-libs/glibc-2.28>, <sys-devel/binutils-2.32-r1>, <sys-devel/binutils-hppa64-2.32-r1>, <sys-libs/binutils-libs-2.32-r1>

Удивительный @world!

#linux #update_world

2019.09.06 03:30

# emerge @world

# emerge --update --newuse --deep --with-bdeps=y --keep-going=y --autounmask-write -av @world

Total: 788 packages (641 upgrades, 5 downgrades, 86 new, 12 in new slots, 44 reinstalls, 2 uninstalls), Size of downloads: 3,031,872 KiB
Fetch Restriction: 2 packages (2 unsatisfied)
Conflict: 6 blocks

#linux #update_world

2019.03.28 16:14