Автор Тема: devpts на ядрах выше 4.9.17-std-def  (Прочитано 1666 раз)

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
При загрузке с ядрами выше 4.9.17-std-def на загрузке, в tty1 начала вылазить ошибка:
mount: mount /dev/pts on /dev/pts failed: Слишком много уровней символических ссылок

Ошибка точно проявляется при загрузке с ядрами 4.9.20-std-def и 4.9.21-std-def.

Но после загрузки системы всё обстоит вот так:
$ grep pts /etc/fstab
devpts /dev/pts devpts nosuid,noexec,gid=tty,mode=620 0 0
$ grep tty /etc/group
tty:x:5:

$ mount|grep pts
devpts on /dev/pts type devpts (rw,relatime,mode=600,ptmxmode=000)
$ uname -r
4.9.21-std-def-alt1

$ mount|grep pts
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
$ uname -r
4.9.17-std-def-alt1

$ mount|grep pts
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
$ uname -r
4.4.53-std-def-alt1

$ ll /dev/pts/0
crw--w---- 1 user tty 136, 0 апр 13 14:08 /dev/pts/0
$ uname -r
4.4.53-std-def-alt1


$ ll /dev/pts/0
crw------- 1 user user 136, 0 апр 13 14:14 /dev/pts/0
$ uname -r
4.9.21-std-def-alt1
« Последнее редактирование: 13.04.2017 15:06:37 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: devpts на ядрах выше 4.9.17-std-def
« Ответ #1 : 13.04.2017 16:01:52 »
На ядрах 4.9.2x-std-def права на pts/N сломаны и пользователь состоящий в группе tty теперь не может отправить сообщение пользователю в /dev/pts/N.
Попытка выполнить эту операцию приведёт к сообщению:
-bash: /dev/pts/0: Отказано в доступе

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: devpts на ядрах выше 4.9.17-std-def
« Ответ #2 : 13.04.2017 16:20:06 »
При мультиюзер с мультисессиями, сообщение можно было например оставить так:
echo -e "\nВ субботу идём в турпоход с ночёвкой\nСбор на старом месте\nБудет желание, приходи" >/dev/pts/0
Здесь 0 - это номер псевдотерминала.

Но ещё возможно для /dev/ttyN
« Последнее редактирование: 13.04.2017 17:39:15 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: devpts на ядрах выше 4.9.17-std-def
« Ответ #3 : 13.04.2017 16:46:42 »
Тут ещё пролетело мимо:
https://bugzilla.altlinux.org/show_bug.cgi?id=32068#c5

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: devpts на ядрах выше 4.9.17-std-def
« Ответ #4 : 15.04.2017 22:11:31 »
Ремонт сломанных в альтах прав на /dev/pts/N, - сизиф

Ловим пакет-виновник:

Смотрим что изменилось до того как после загрузки с наиболее ранним ядром выдало слом прав на pts/N
# grep 4.9.20 /var/log/user/info | awk '{print $1,$2,$3,$6,$7,$8}'
Mar 16 00:27:33 kernel-modules-bcmwl-std-def-6.30.223.248-alt10.263221.1 1489320161 installed
Apr 7 15:38:06 kernel-image-std-def-1:4.9.20-alt1 1490962229 installed
Apr 7 15:38:08 kernel-modules-drm-std-def-1:4.9.20-alt1 1490962229 installed
Apr 7 15:38:10 kernel-modules-v4l-std-def-1:4.9.20-alt1 1490962229 installed
Apr 7 15:38:15 kernel-modules-staging-std-def-1:4.9.20-alt1 1490962229 installed
Apr 7 15:38:15 kernel-modules-drm-nouveau-std-def-1:4.9.20-alt1 1490962229 installed
Apr 7 15:38:16 kernel-modules-drm-radeon-std-def-1:4.9.20-alt1 1490962229 installed
# grep make-initrd /var/log/user/info | grep 'Mar 28' | awk '{print $1,$2,$3,$6,$7,$8}'
Mar 28 18:49:24 make-initrd-busybox-1.24.2-alt2 1489662012 installed
Mar 28 18:49:25 make-initrd-2.0.3-alt3 1490653889 installed
Mar 28 18:49:26 make-initrd-devmapper-2.0.3-alt3 1490653889 installed
Mar 28 18:50:37 make-initrd-lvm-2.0.3-alt3 1490653889 installed
Mar 28 18:50:38 make-initrd-luks-2.0.3-alt3 1490653889 installed
Mar 28 18:50:38 make-initrd-mdadm-2.0.3-alt3 1490653889 installed
Mar 28 18:50:38 make-initrd-plymouth-2.0.3-alt3 1490653889 installed
Mar 28 18:52:03 make-initrd-plymouth-0.8.14-alt1 1490087927 removed
Mar 28 18:52:03 make-initrd-mdadm-0.8.14-alt1 1490087927 removed
Mar 28 18:52:04 make-initrd-luks-0.8.14-alt1 1490087927 removed
Mar 28 18:52:04 make-initrd-lvm-0.8.14-alt1 1490087927 removed
Mar 28 18:52:05 make-initrd-devmapper-0.8.14-alt1 1490087927 removed
Mar 28 18:52:06 make-initrd-0.8.14-alt1 1490087927 removed

Отслеживаем дату сборки пакета-виновника чтобы найти нужный срез архива по дате
# rpm -qi make-initrd-2.0.3-alt3 | grep 'Build Date'
Build Date  : Вт 28 мар 2017 01:31:29

Перенацеливаем и обновляем базу
# apt-repo rm all
# tail -n3 /etc/apt/sources.list
## Rollback make-initrd
rpm http://ftp.altlinux.org/pub/distributions/archive/sisyphus/date/2017/03/27 i586 classic
rpm http://ftp.altlinux.org/pub/distributions/archive/sisyphus/date/2017/03/27 noarch classic
# apt-get update

Разрешаем даунгрейд пакетов
# cat /etc/apt/preferences
Package: *
Pin: release c=classic
Pin-Priority: 1001

Выполняем даунгрейд пакетов
# apt-get install make-initrd make-initrd-busybox-
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
Следующие дополнительные пакеты будут установлены:
  make-initrd-devmapper make-initrd-luks make-initrd-lvm make-initrd-mdadm make-initrd-plymouth
Следующие пакеты будут УДАЛЕНЫ:
  make-initrd-busybox
Следующие пакеты будут ЗАМЕНЕНЫ БОЛЕЕ СТАРЫМИ ВЕРСИЯМИ:
  make-initrd make-initrd-devmapper make-initrd-luks make-initrd-lvm make-initrd-mdadm make-initrd-plymouth
0 будет обновлено, 0 новых установлено, 6 пакетов будет заменено на старые версии, 1 пакетов будет удалено и 220 не будет обновлено.
Необходимо получить 159kB архивов.
После распаковки будет освобождено 363kB дискового пространства.
Продолжить? [Y/n] y

Перегенерируем для текущего актуального ядра.
Обратите внимание, что поддержка shell исчезла
# make-initrd
Config file: /etc/initrd.mk
Generating module dependencies on host ...
Creating initrd image ...
Adding plymouth support ...
Adding modules ...
Adding modules (preload) ...
Adding rescue modules ...
Adding module dependencies ...
Generating module dependencies in image ...
Packed modules: agpgart ali-agp amd64-agp amd-k7-agp ata_generic ata_piix ati-agp autofs4 button crc16 drm drm_kms_helper efficeon-agp evdev ext4 fb_sys_fops fscrypto hid hid-generic i2c-algo-bit i915 input-leds intel-agp intel-gtt jbd2 libata mbcache nvidia-agp pata_acpi scsi_mod sd_mod serio_raw sis-agp sworks-agp syscopyarea sysfillrect sysimgblt via-agp video
Packing image to archive ...
Compressing image ...
Installing image ...
Removing work directory ...

Image is saved as /boot/initrd-4.9.21-std-def-alt1.img

# reboot

На загрузке ошибка mount с /dev/pts исчезла и права на /dev/pts/N восстановлены
# ll /dev/pts/0
crw--w---- 1 user tty 136, 0 апр 15 17:57 /dev/pts/0

Ставим make-initrd в hold для запрета обновления при dist-upgrade
# cat /etc/apt/apt.conf.d/90-apt-hold.conf
RPM::Hold { make-initrd; };

Установленные пакеты make-initrd* версии 0.8.14.
Запретим устанавливаться отсутствующему в системе пакету make-initrd-busybox версии 1.24.2-alt2 при установленных пакетах make-initrd* версии 0.8.14.
# cat /etc/apt/preferences
Package: make-initrd-busybox
Pin: version 0.8.14*
Pin-Priority: -1
# apt-cache show make-initrd|grep -i ^vers
Version: 2.0.3-alt3
Version: 0.8.14-alt1

Цель на актуальный репозиторий возвращается обычным образом.

Про диверсию make-initrd можно прочитать тут:
https://forum.altlinux.org/index.php?topic=38484.msg308446#msg308446
« Последнее редактирование: 16.04.2017 20:24:36 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: devpts на ядрах выше 4.9.17-std-def
« Ответ #5 : 16.04.2017 17:21:55 »
Ещё одна немаловажная деталь:

Alexey Gladkov  сообщил, что make-initrd при откате надо ставить в hold.
Это правильно, но не совсем:
Если make-initrd откатить и поставить в hold, но не заблокировать по версии и через Pin-Priority установку нового пакета make-initrd-busybox, и при этом initrd.img будет перегенерирован, то на загрузке, ошибки с mount /dev/pts не будет и права на pts/N тоже сломаны не будут, но на загрузке вывалит просто гигантское количество повторений ошибки логгирования.

Поэтому, если пакеты make-initrd* откатились по версии и поставлены в hold, блокировать установку пакета make-initrd-busybox через version и Pin-Priority, обязательно. Этот пакет ни в коем случае не должен попасть в систему.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: devpts на ядрах выше 4.9.17-std-def
« Ответ #6 : 16.04.2017 18:44:33 »
В общем перед пользователем альтовой системы на sysv стоит непростой выбор:
- или смириться со сломом прав на /dev/pts/N
- или огородить систему костылями в виде блокировок
- или садиться и перебирать исходники каждой версии make-initrd со сборкой своего локального пакета, версии чуть выше чем в репозитории.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: devpts на ядрах выше 4.9.17-std-def
« Ответ #7 : 17.04.2017 13:06:00 »
Другой вариант блокировки make-initrd-busybox

# rpm -qa | grep make-initrd
make-initrd-plymouth-0.8.14-alt1.i586
make-initrd-devmapper-0.8.14-alt1.i586
make-initrd-lvm-0.8.14-alt1.i586
make-initrd-0.8.14-alt1.i586
make-initrd-mdadm-0.8.14-alt1.i586
make-initrd-luks-0.8.14-alt1.i586
# grep make-initrd /etc/apt/apt.conf.d/90-apt-hold.conf
#RPM::Hold { make-initrd; };
# cat /etc/apt/preferences
Package: make-initrd-busybox
Pin: version 0.8.14*
Pin-Priority: -1
# apt-get dist-upgrade
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
Подсчет обновлений... Завершено
Следующие пакеты будут СОХРАНЕНЫ:
  make-initrd make-initrd-devmapper make-initrd-luks make-initrd-lvm make-initrd-mdadm make-initrd-plymouth
0 будет обновлено, 0 новых установлено, 0 пакетов будет удалено и 6 не будет обновлено.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: devpts на ядрах выше 4.9.17-std-def
« Ответ #8 : 17.04.2017 14:25:48 »
Отписался на багтрекере:
Ошибка 32068 - шум при загрузке
https://bugzilla.altlinux.org/show_bug.cgi?id=32068#c8

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: devpts на ядрах выше 4.9.17-std-def
« Ответ #9 : 04.06.2017 06:25:16 »
Обновил ядро с 4.9.22 до *std-def#1:4.9.30-alt1...
Такой некислый грохот пошёл с дебагом ядра вставшего колом!..

Пришлось из
/etc/apt/preferences
убрать запрет установки make-initrd-busybox и замораживание make-initrd по версии.
Плюс надо обязательное обновление make-initrd.

Иначе даже если *std-def#1:4.9.30-alt1 не удалить, make-initrd не обновлять и загружаться с *std-def#1:4.9.22, на загрузке такая некислая простыня проскакивает как метеорит гигантского размера, что-то похожее на call trace. Исчезнет если удалить 4.9.30. И с этой подводной лодки без обновления make-initrd никак не спрыгнуть. Ну хорошо хоть права на /dev/pts/* восстановили. И то хлеб.
Давно такого дикого грохота не видел.