При попытке собрать дистро на mkimage-profiles ловлю ошибку: mki-copy-our2out: has started executing. './live' -> '/tmp/.private/mike/mkimage-profiles.build.BpNTgGc/live/.work/.out/live' cp: cannot create hard link '/tmp/.private/mike/mkimage-profiles.build.BpNTgGc/live/.work/.out/live' to './live': Operation not permitted $ rpm -qa | grep mkimage mkimage-0.2.12.1-alt1 mkimage-preinstall-0.2.12.1-alt1 Установка Сизифных версий помогла только до перезагрузки. До перезагрузки также помогает обход вида: 'echo 0 > /proc/sys/fs/protected_hardlinks' (спасибо Константину Четверикову).
mkimage-preinstall делает такое echo сам: $ rpm -q --scripts mkimage-preinstall postinstall scriptlet (through /bin/sh): if grep -Fqsx 1 "/proc/sys/fs/protected_hardlinks"; then echo "mkimage-preinstall: allowing to hardlink non-owned files..." >&2 echo 0 > /proc/sys/fs/protected_hardlinks fi и создаёт /etc/sysctl.d/mkimage.conf на случай перезагрузки. Если установка mkimage-preinstall приводит к выставлению содержимого /proc/sys/fs/protected_hardlinks в 0, а перезагрузка после этого -- нет, то надо понять, что сломалось в системе (с учётом того, что /etc/sysctl.d/ живёт в filesystem, а action 'Configuring kernel parameters:' происходит в /etc/rc.d/rc.sysinit по крайней мере на системах с sysvinit).
Так, а что говорит chkconfig --list sysfs ?
Говорит, что он не добавлен: chkconfig --list sysfs Внимание: в выводе отображены только SysV службы (нативные службы systemd отсутствуют) конфигурация SysV может быть сброшена нативной конфигураией systemd. сервис sysfs поддерживает chkconfig, но не используется ни на одном уровне выполнения (запустите 'chkconfig --add sysfs')
Вот, теперь понятно. Просьба глянуть 0.2.17: ttp://git.altlinux.org/tasks/131779/
http://git.altlinux.org/tasks/131779/
Хм, почему-то не помогло. rpm -qa | grep mkimage mkimage-0.2.17-alt1 mkimage-preinstall-0.2.17-alt1
(В ответ на комментарий №6) > Хм, почему-то не помогло. А что теперь говорит chkconfig --list sysfs ?
$ chkconfig --list sysfs Внимание: в выводе отображены только SysV службы (нативные службы systemd отсутствуют) конфигурация SysV может быть сброшена нативной конфигураией systemd. sysfs 0:выкл 1:выкл 2:вкл 3:вкл 4:вкл 5:вкл 6:выкл #cat /proc/sys/fs/protected_hardlinks 1
(В ответ на комментарий №8) > $ chkconfig --list sysfs [...] > sysfs 0:выкл 1:выкл 2:вкл 3:вкл 4:вкл 5:вкл 6:выкл > #cat /proc/sys/fs/protected_hardlinks > 1 Не воспроизводится -- взял регулярку, apt-repo add 131779; apt-get update; apt-get install mkimage-preinstall; reboot -- в protected_hardlinks 0, образы собираются... Можно, конечно, брать audit в руки и выяснять, кто последним в этот /proc-файл по записи ломился -- но проверь для начала, совершенно случайно нигде больше в /etc не упоминается protected_hardlinks?
Нет, не упоминается: [root@torabora etc]# grep -ir protected_hardlinks sysctl.d/mkimage.conf:fs.protected_hardlinks = 0 audit пока мне не поддался, не хочет работать.
(В ответ на комментарий №10) > Нет, не упоминается: Если используется systemd -- похоже, это на самом деле бага на sysfsutils о том, что не хватает sysfs.service, который запускался бы достаточно поздно, чтоб перекрывать любую самодеятельность в процессе загрузки. Такой файлик упоминается в http://forum.altlinux.org/index.php/topic,29916.msg211031.html#msg211031 и отсутствует в сизифе.
может вам просто мешает в /lib/sysctl.d/50-default.conf ? # Enable hard and soft link protection fs.protected_hardlinks = 1 fs.protected_symlinks = 1 Причем под sysV он тоже обрабатывается.
"На третий день Зоркий Джо заметил"... Спасибо, Лёш -- туда заглянуть не додумался. Да, мешает. Как бы перекрыть или убрать в что-нить, с чем спокойно может конфликтовать mkimage?
Тёзка, а гляньте на всякий http://git.altlinux.org/tasks/133785/
Переустановил mkimage из этого таска - помогло только до перезагрузки. #cat /proc/sys/fs/protected_hardlinks 1
(В ответ на комментарий №15) > Переустановил mkimage из этого таска Надо mkimage-preinstall -- там файлик /lib/sysctl.d/90-mkimage.conf
Переустановил и его, не помогло: [root@torabora ~]# cat /proc/sys/fs/protected_hardlinks 1 [root@torabora ~]# cat /lib/sysctl.d/90-mkimage.conf fs.protected_hardlinks = 0
не, Миша ты на правильно сделал. Выдержка из man sysctl.d: -------------- Files in /etc/ override files with the same name in /lib/ and /run/. Files in /run/ override files with the same name in /lib/. Packages should install their configuration files in /lib/. Files in /etc/ are reserved for the local administrator, who may use this logic to override the configuration files installed by vendor packages. All configuration files are sorted by their filename in lexicographic order, regardless of which of the directories they reside in. If multiple files specify the same variable name, the entry in the file with the lexicographically latest name will be applied. It is recommended to prefix all filenames with a two-digit number and a dash, to simplify the ordering of the files. ----------------- Т.е. если хочется вообще отменить действие /lib/sysctl.d/50-default.conf, то надо создать /etc/sysctl.d/50-default.conf с нужными параметрами (а может даже лучше и /run/sysctl.d/50-default.conf во время загрузки, каким-нибудь генератором) Хотя судя по man, /lib/sysctl.d/90-mkimage.conf должен перекрывать действие /lib/sysctl.d/50-default.conf, если этого не происходит - надо разбираться почему. PS: А вот сервис sysfs мне кажется вообще не нужен, и в дистрибутивы его включать по-умолчанию тоже не надо.
как вариант, можно вынести fs.protected_hardlinks = 1 fs.protected_symlinks = 1 из /lib/sysctl.d/50-default.conf в отдельный файл, типа /lib/sysctl.d/51-protectedlinks.conf и уже его переопределять в /etc/sysctl.d/51-protectedlinks.conf
(В ответ на комментарий №19) > как вариант, можно вынести fs.protected_hardlinks = 1 > fs.protected_symlinks = 1 из /lib/sysctl.d/50-default.conf в отдельный файл, > типа /lib/sysctl.d/51-protectedlinks.conf > и уже его переопределять в /etc/sysctl.d/51-protectedlinks.conf ...или упаковать в отдельный подпакет, с которым можно конфликтовать (выглядит более коряво, но зато более надёжно). (В ответ на комментарий №18) > If multiple files specify the same variable name, the entry in the file > with the lexicographically latest name will be applied. [...] > Хотя судя по man, /lib/sysctl.d/90-mkimage.conf должен перекрывать действие > /lib/sysctl.d/50-default.conf, если этого не происходит - надо разбираться > почему. Вот и я не понял. > PS: А вот сервис sysfs мне кажется вообще не нужен, и в дистрибутивы его > включать по-умолчанию тоже не надо. Почему? Приходится крутить и другие вынужденно интересные ручки вроде /sys/devices/system/cpu/intel_pstate/no_turbo
(В ответ на комментарий №20) > > PS: А вот сервис sysfs мне кажется вообще не нужен, и в дистрибутивы его > > включать по-умолчанию тоже не надо. > Почему? Приходится крутить и другие вынужденно интересные ручки вроде > /sys/devices/system/cpu/intel_pstate/no_turbo Это пример, на который мне нечего возразить :) Умеешь озадачить :) Для остального есть cpupower. Возможно в будущем cpupower научат работать с P-States. На десктопе можно взамен использовать thermald, а вот на сервере зависимость у thermald на dbus излишняя. Кроме thermald ничего для управления P-States не нашел. Но это не касается текущего бага, совсем другая тема, для рассылки.
(В ответ на комментарий №19) > как вариант, можно вынести > fs.protected_hardlinks = 1 > fs.protected_symlinks = 1 > из /lib/sysctl.d/50-default.conf в отдельный файл, типа > /lib/sysctl.d/51-protectedlinks.conf > и уже его переопределять в /etc/sysctl.d/51-protectedlinks.conf Подтверждаю, свежий t7, система на systemd - те же грабли можно еще и так ( изобретение не мое а sb ): [root@host-2 ~]# apt-get install --reinstall mkimage-preinstall или так на скорую руку: [root@host-2 ~]# sysctl -w fs.protected_symlinks=0 [root@host-2 ~]# sysctl -w fs.protected_hardlinks=0
Вообще не очень понятно, как связаны пакет sysfsutils (который менеджит /sys) и /proc/sys/... (которое sysctl). Запуск сервиса sysfs при загрузке не должен влиять на содержимое /proc/sys, только /sys. Что собственно и подтвердилось. И да, пакет sysfsutils нужен, потому что кроме него никто не пишет в /sys при запуске (AFAIK). Мне например регулярно требуется устанавливать /sys/block/foobar/queue/scheduler для разных дисков. Cpufreq настроить на ноутбуке, опять же. Держать ради простых целей записи одного слова в один файл отдельную программу на каждую хотелку смысла не вижу. И да, не хватает sysfs.service.
(В ответ на комментарий №23) > Вообще не очень понятно, как связаны пакет sysfsutils (который менеджит /sys) и > /proc/sys/... (которое sysctl). Заскок; но тогда тем более непонятно, procps-то есть всегда (требуется startup). > И да, не хватает sysfs.service. Это уж отдельно на sysfsutils.
(В ответ на комментарий №23) > Вообще не очень понятно, как связаны пакет sysfsutils (который менеджит /sys) и > /proc/sys/... (которое sysctl). Запуск сервиса sysfs при загрузке не должен > влиять на содержимое /proc/sys, только /sys. Что собственно и подтвердилось. А кто под этим вашим systemd обрабатывает sysctl.d/ и как его отлаживать? > И да, не хватает sysfs.service. bug 31048
Просьба проверить sysfsutils-2.1.0-alt8 (см. #31048).
(В ответ на комментарий №25) > (В ответ на комментарий №23) > > Вообще не очень понятно, как связаны пакет sysfsutils (который менеджит /sys) и > > /proc/sys/... (которое sysctl). Запуск сервиса sysfs при загрузке не должен > > влиять на содержимое /proc/sys, только /sys. Что собственно и подтвердилось. > А кто под этим вашим systemd обрабатывает sysctl.d/ и как его отлаживать? обрабатывает sysctl.d/ - /lib/systemd/systemd-sysctl. И под systemd, и под sysV. > > И да, не хватает sysfs.service. > bug 31048
В связи с https://lists.altlinux.org/pipermail/sisyphus/2016-January/364681.html прошу сделать возможность отключения хардлинков
Кстати, а где это по-быстрому меняется? В /usr/share/mkimage/tools/mki-sh-functions комментирование -l для cp_args не помогает - все равно получается: mkimage: Processing 'copy-tree' ... mkimage: Processing 'copy-subdirs' ... cp: cannot create hard link '/.image/live' to './live': Operation not permitted make: *** [copy-subdirs] Ошибка 1
На сколько я понял из обсуждения баги: https://bugzilla.redhat.com/show_bug.cgi?id=924433 наш systemd-sysctl работает так: 1. читает последовательно /etc/sysctl.conf, /lib/sysctl.d/, /etc/sysctl.d/ 2. ругается, если находит ВТОРОЕ упоминание опции и НЕ ПРИМЕНЯЕТ эту опции # # grep -R protected_hardlinks /etc/sysctl.conf /lib/sysctl.d/ /etc/sysctl.d/ /lib/sysctl.d/50-default.conf:fs.protected_hardlinks = 1 /etc/sysctl.d/mkimage.conf:fs.protected_hardlinks = 0 # SYSTEMD_LOG_LEVEL=debug /lib/systemd/systemd-sysctl parse: /etc/sysctl.conf parse: /lib/sysctl.d/50-default.conf Duplicate assignment of kernel/sysrq in file '/lib/sysctl.d/50-default.conf', ignoring. parse: /etc/sysctl.d/mkimage.conf Duplicate assignment of fs/protected_hardlinks in file '/etc/sysctl.d/mkimage.conf', ignoring. Setting 'kernel/sysrq' to '1' Setting 'kernel/core_pattern' to '/' Setting 'vm/mmap_min_addr' to '65536' Setting 'kernel/core_uses_pid' to '1' Setting 'net/ipv4/conf/default/rp_filter' to '1' Setting 'net/ipv4/conf/default/accept_source_route' to '0' Setting 'fs/protected_hardlinks' to '1' Setting 'fs/protected_symlinks' to '1' Получается, если хотим переопределить что-то из /lib/sysctl.d/, нужно в /etc/sysctl.d/ создать файл, имя которого lexically _раньше_ переопределяемого пример: 1. имеем "fs.protected_hardlinks = 1" в /lib/sysctl.d/50-default.conf 2. создаем /etc/sysctl.d/49-mkimage.conf с содержимым "fs.protected_hardlinks = 0" и все начинает работать, как хотим мы однако, в баге 924433 в комментах #17 и #18 говорят что в fedora/rhel это переопределили https://bugzilla.redhat.com/show_bug.cgi?id=924433#c18 (или я не правильно понял?) и в http://mirror.yandex.ru/fedora/linux/development/rawhide/Everything/source/tree/Packages/s/systemd-232-6.fc26.src.rpm в файле sysctl.conf.README пишут: # sysctl settings are defined through files in # /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/. # # Vendors settings live in /usr/lib/sysctl.d/. # To override a whole file, create a new file with the same in # /etc/sysctl.d/ and put new settings there. To override # only specific settings, add a file with a lexically later # name in /etc/sysctl.d/ and put new settings there. # # For more information, see sysctl.conf(5) and sysctl.d(5). *lexically later name* Я так понял они сделали поведение, которое ожидал получить mike@, я и другие у нас, поведение похожее на обработку /etc/security/limits.d/, при котором файл, имя которого lexically _позже_ будет переопределять _все_ что было до него
Ленар, дружище, напомни при встрече -- с меня причитается :)
Просьба к заинтересованным: гляньте http://webery.altlinux.org/task/176090
mkimage-0.2.19-alt1 -> sisyphus: * Wed Jan 11 2017 Michael Shigorin <mike@altlinux> 0.2.19-alt1 - preinstall: fixed sysctl file name, *thanks* snejok@ (closes: #30351) - mki-copy-efiboot: adjusted for dosfstools-3.0 either
Миша, ты наверное будешь меня бить, но на Сизифе обратная ситуация, которую я описал во второй части комментария #30 Они таки это починили как мы и ожидали изначально: --- # SYSTEMD_LOG_LEVEL=debug /lib/systemd/systemd-sysctl Parsing /lib/sysctl.d/49-coredump-null.conf Parsing /etc/sysctl.d/49-mkimage.conf Parsing /lib/sysctl.d/50-default.conf Overwriting earlier assignment of fs/protected_hardlinks in file '/lib/sysctl.d/50-default.conf'. Parsing /etc/sysctl.d/99-sysctl.conf Setting 'kernel/core_uses_pid' to '1' Setting 'vm/mmap_min_addr' to '65536' Setting 'kernel/sysrq' to '1' Setting 'fs/protected_hardlinks' to '1' Setting 'fs/protected_symlinks' to '1' Setting 'kernel/core_pattern' to '/' # sysctl fs.protected_hardlinks fs.protected_hardlinks = 1 --- # mv /etc/sysctl.d/49-mkimage.conf /etc/sysctl.d/51-mkimage.conf # SYSTEMD_LOG_LEVEL=debug /lib/systemd/systemd-sysctl Parsing /lib/sysctl.d/49-coredump-null.conf Parsing /lib/sysctl.d/50-default.conf Parsing /etc/sysctl.d/51-mkimage.conf Overwriting earlier assignment of fs/protected_hardlinks in file '/etc/sysctl.d/51-mkimage.conf'. Parsing /etc/sysctl.d/99-sysctl.conf Setting 'vm/mmap_min_addr' to '65536' Setting 'kernel/sysrq' to '1' Setting 'fs/protected_hardlinks' to '0' Setting 'fs/protected_symlinks' to '1' Setting 'kernel/core_pattern' to '/' Setting 'kernel/core_uses_pid' to '1' # sysctl fs.protected_hardlinks fs.protected_hardlinks = 0 --- и даже так: # mv /etc/sysctl.d/51-mkimage.conf /etc/sysctl.d/mkimage.conf # SYSTEMD_LOG_LEVEL=debug /lib/systemd/systemd-sysctl Parsing /lib/sysctl.d/49-coredump-null.conf Parsing /lib/sysctl.d/50-default.conf Parsing /etc/sysctl.d/99-sysctl.conf Parsing /etc/sysctl.d/mkimage.conf Overwriting earlier assignment of fs/protected_hardlinks in file '/etc/sysctl.d/mkimage.conf'. Setting 'fs/protected_hardlinks' to '0' Setting 'kernel/core_pattern' to '/' Setting 'fs/protected_symlinks' to '1' Setting 'vm/mmap_min_addr' to '65536' Setting 'kernel/core_uses_pid' to '1' Setting 'kernel/sysrq' to '1' # sysctl fs.protected_hardlinks fs.protected_hardlinks = 0 --- так же прошу удалить Requires: sysfsutils из mkimage-preinstall за ненадобностью (проверил на Сизифе и c7)