LINUX.ORG.RU

Разработчики Fedora обсуждают объединение каталогов для исполняемых файлов

 


0

0

Разработчики Fedora обсуждают возможное объединение каталогов /bin, /sbin/, /usr/bin и /usr/sbin: предлагается все исполняемые файлы помещать в каталог /usr/bin, а другие каталоги сделать символическими ссылками на него для совместимости.

Леннарт Поттеринг в списке рассылки разработчиков предоставляет список преимуществ такого подхода:

  • разделение на /bin и /sbin приводит к усложнению работы разработчиков, которые зачастую ошибаются с выбором каталога, либо бездумно помещают файлы в /usr/bin;
  • первоначальное назначение каталога /sbin (размещение статически собранных файлов, на что указывает буква «s») давно неактуально;
  • разделение на /bin и /sbin не имеет отношения к безопасности (это был бы глупый принцип «security by obscurity»);
  • разделение на /bin и /sbin имеет значение только для переменной $PATH, однако усложнять доступ пользователей к некоторым инструментам - плохая затея; к тому же для этого есть более подходящие каталоги;
  • разделение на /bin и /sbin в любом случае бессмысленно уже пару версий Fedora, поскольку оба каталога включены в переменную $PATH для всех пользователей;
  • разделение приводит к усложнению, а мы должны стремиться к упрощению;
  • различные дистрибутивы размещают некоторые бинарные файлы в различных каталогах, что приводит к проблемам с переносимостью скриптов;
  • разделение на /bin и /usr/bin в основном было сделано для этапа ранней загрузки системы - минимальный набор загрузочных файлов находится в /. Но это давно не работает, и соответствующая опция убрана из инсталлятора anaconda. Более того, размещение /usr на отдельной файловой системе вызывает проблемы при загрузе посредством systemd;
  • разделение на минимальную систему в / и полную в /usr также стало бессмысленно благодаря initrd, а содержание двух уровней «минимальной загрузочной системы» - дурацкая затея;
  • существенно упростится установка «read-only» системы: так, libc и другие системные библиотеки будут доступны только на чтение, а /etc - на чтение и запись;
  • снятие снапшотов станет действительно атомарной операцией. В настоящее время btrfs требует 5 снимков - /lib, /lib64, /bin, /sbin и /usr вместо одного, что неудобно и может приводить к состояниям гонки;
  • существенно упростятся сетевая и контейнерная установки;
  • сборочные скрипты упростятся: в частности, autoconf не знает о разделении на / и /usr, и для правильной работы с ними приходится прилагать специальные усилия;
  • эксперименты уже показали жизнеспособность предложенной схемы и отсутствие серьезных проблем;
  • есть разработчик (Harald Hoyer), готовый выполнить необходимую работу.

Таким образом, подобное изменение многое упрощает для разработчика, мейнтейнера и администратора. Если оно будет принято, то может быть реализовано уже в Fedora 17.

>>> Подробности

★★★★

Проверено: Shaman007 ()
Последнее исправление: JB (всего исправлений: 2)

Ответ на: комментарий от anonymous

Еще раз. Система состоит из дистрибутивных файлов (код и данные, которыми управляет пакетный менеджер), конфигурации хоста (/etc) и изменяемых данных хоста (/var). Чтобы запустить систему, нужно получить доступ к дистрибутивным файлам и конфигурации — т.е. именно то, что называется «смонтировать корень».

В случае, если у нас система тупо установлена на 1 раздел, то совершенно не важно, где и как лежат бинарники — в /bin или /usr/bin. В случае, если /usr вынесен на отдельное устройство или в сеть, то да, картина загрузки принципиально меняется, если мы будет менять расположение бинарников.

Вариант 1. Пусть у нас есть 2 раздела — / и /usr. Раньше для запуска системы, initrd был обязан смонтировать только /. Теперь он обязан смонтировать / и /usr. Ну и что? Принципиально ничего не изменилось. Допилим скрипт для initrd и будем передавать в параметрах ядра не 1 параметр root, а 2 параметра — root и usr. Не проблема.

Вариант 2. /usr монтируется через сеть. Спрашивается: а зачем? Можно привести реальный use case от системы, где есть локальный раздел с минимальной системой в корне и сетевым /usr? Зачем она? Почему бы её просто не переделать в diskless?

geekless ★★
()
Ответ на: комментарий от anonymous

В чём ничтожность аргумента, что /usr должен быть смонтирован до того, как оттуда понадобится что-то запускать?
Пусть пишут скрипты не использующие программы из /usr/{,S}bin и будет счастье.

для тех кто ходит по ссылкам, не правда ли забавна аргументация, что systemd не кривой, потому что CUPS, colord и д.р. нужна /usr для работы.


Забавна, но /usr же нужно монтировать, не смотря на какую-либо аргументацию.

imul ★★★★★
()
Ответ на: комментарий от anonymous

>> root=/dev/mapper/main-root init=/bin/bash

1. я про это не знал, и узнать тогда мне было негде; единственная машина с инетом как раз сломалась;

Это есть с рождения ядра линукс.

2. а это правда будет работать на голой системе, где есть только ядро и шелл? кто создаст этот девайс? initrd разве только?

Да, работает, с вариациями в зависимости от используемого initrd, например, может быть root=/dev/disk/by-id/main-root init=/bin/bash

3. сейчас посмотрел у себя - даже на рабочей системе этого нет:

Чини систему, качай скилл. :) Если ставишь себе LVM, неплохо бы научиться им пользоваться.

anonymous
()
Ответ на: комментарий от anonymous

> Однокристальный роутер, корень - это флешка на ubifs, которая один раз настраивается и переводится в read-only, /usr и /var монтируются с внешнего USB-диска, вставленного в usb-порт. Причем, если флешка не вставлена, то роутер все равно работает как роутер, просто не запускается торрент-клиент, который лежал на внешнем диске и качал туда же.

Феерическое извращение. Собери торрент-клиент с префиксом в /opt, как и положено по стандарту для дополнительного ПО. :-D

geekless ★★
()
Ответ на: комментарий от unsigned

>> 1. встраиваемых систем нет

Как это им помешает?

минимальный бутабельный корневой образ в r/o, юзерспейс со вспомогательными утилитами на отдельном R/W разделе

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

2. загрузки по сети, с разделяемым /usr, нет

/usr и будет разделяемым. Еще разделяемей, чем сейчас.

э-э-э? в смысле больше всего напихают?

4. задержек по доступу к файлам, сваленным в одну большую кучу в одной директории, нет

Куча уже лежит в /usr/bin, в остальных каталогах крохи.

for dir in /bin /sbin /usr/bin /usr/sbin ; do echo «$(du -sh $dir) = $(ls -1 $dir |wc -l) files» ; done

12M /bin = 200 files 18M /sbin = 353 files 802M /usr/bin = 4618 files 59M /usr/sbin = 507 files

всего 81% в /usr/bin

не такие уж и крохи. причем самые часто используемые как раз в /bin

5. ФС на всех разделах всегда одинаковая

Зачем разные ФС на / и /usr?

смотрите пример выше про встраиваемые системы. если этого примера недостаточно, то рекомендуется почитать соответствующую литературу.

d4s
()
Ответ на: комментарий от Darth_Revan

> Зачем показывать непривелигерованному пользователю команды, которыми он всё равно не сможет воспользоваться?

Учитывая, что sbin создавался для статически слинкованных бинарников...

tensai_cirno ★★★★★
()
Ответ на: комментарий от geekless

> Раньше для запуска системы, initrd был обязан смонтировать только /. Теперь он обязан смонтировать / и /usr.

Ой-ёй! Почему бы перейдя на примонтированный / первым делом не почекать локальные fs и не примонтировать всё что нужно, в том числе и /usr с /var, а потом уже пускать все остальные демоны?

imul ★★★★★
()
Ответ на: комментарий от imul

> Почему бы перейдя на примонтированный / первым делом не почекать локальные fs и не примонтировать всё что нужно, в том числе и /usr с /var, а потом уже пускать все остальные демоны?

Какие еще демоны? В корне не будет ни одного бинарника.

geekless ★★
()
Ответ на: комментарий от unsigned

> Кстати, из новости неясно: Леннарт не придумал все это, а лишь поддержал.

Он и придумал. Это он только для вида пишет, что, мол, мы тут пообсуждали и я решил. Его это идея.

anonymous
()
Ответ на: комментарий от imul

> Пользуюсь и тем и другим, особенно часто --bind. Где посмотреть на глюки?

mount --bind mymegadir /tmp/link umount mymegadir

mount -o loop,ro image.iso /mnt/temp umount image.iso

anonymous
()
Ответ на: комментарий от geekless

> Какие еще демоны? В корне не будет ни одного бинарника.

Я не про нововведения речь веду, а про классическую схему. Которая мешается нормальной работе systemd.

imul ★★★★★
()
Ответ на: комментарий от imul

>В чём ничтожность аргумента, что /usr должен быть смонтирован до того, как оттуда понадобится что-то запускать?

В том что ты озвучил не тот аргумент, прочитай заголовок темы еще раз.

Пусть пишут скрипты не использующие программы из /usr/{,S}bin и будет счастье.

Золотые слова, только надо добавить: «Пусть пишут программы (systemd), не запускающие скрипты и программы для работы которых нужен /usr/{,s}bin, пока /usr не подмонтирован.»

Забавна, но /usr же нужно монтировать, не смотря на какую-либо аргументацию.

Вон geekless выше из initrd предлагает монтировать, замечательно, однако почему мне сейчас запрещают отдельный раздел на /usr делать, запилите все корректно сначала потом уже и systemd предлагайте.

anonymous
()
Ответ на: комментарий от ignik

> Внос /usr в / может предлагать только упоротый идиот, писавший исключительно для десктопа.

*fixed

d4s
()
Ответ на: комментарий от imul

> нормальной работе systemd.

Поделил на ноль.

systemd меня вообще не интересует. Меня интересует различие алгоритмов загрузки системы, которое проистекает из этого изменения.

geekless ★★
()
Ответ на: комментарий от tensai_cirno

> Учитывая, что sbin создавался для статически слинкованных бинарников...

Идиот/тролль детектед. Читать до просветления:

http://www.pathname.com/fhs/pub/fhs-2.3.html

Цитаты:

«/bin : Essential user command binaries (for use by all users)»

«/sbin : System binaries»

«/usr/bin : Most user commands»

«/usr/sbin : Non-essential standard system binaries»

Покажи-ка хоть слово про то, должны быть бинарники там статическими или нет. Или Леннарта Жопперинга обслушался, хомяк-идиот?

anonymous
()

Всем, кому не нравится FHS, и Поттерингу тоже: идите на GoboLinux, вас там ждут.

anonymous
()
Ответ на: комментарий от Pythonist

> Вот наркоманы! А если у меня /usr отвалится, то у меня даже mount не будет! Ну и сказка.

Смотрите дальше. Как /usr смонтируется без mount? ))

Magister2k7
()
Ответ на: комментарий от geekless

> Какие еще демоны? В корне не будет ни одного бинарника.

То есть ты предлагаешь перенести в initrd все те бинарники, что сейчас лежат в корне и нужны для загрузки системы? И зачем?

Еще раз, сейчас есть две разные задачи:
* initrd монтирует корень, он содержит минимум программ и модулей, достаточных для того чтобы смонтировать корень, и занимает минимум памяти (да, initrd грузится в память, внезапно)
* корень монтирует все остальное, /var, /usr, где бы они ни находились, в сети или на локальном диске, после чего запускает пользовательские программы, он содержит огромное количество разных утилит, которые могут понадобиться для проверки и подключения файловых систем

Ты предлагаешь объединить две разные задачи в одну. Зачем? Может давай сразу запхнем initrd вместе с ядром в bios, чего уж там мелочиться? Надо только туда еще Х-ы с гномом добавить.

anonymous
()
Ответ на: комментарий от anonymous

> mount --bind mymegadir /tmp/link umount mymegadir

pet64 ~ # ls /mnt/linux
pet64 ~ # mount /dev/sda6 /mnt/linux
pet64 ~ # ls /mnt/linux/dev | wc -l
22
pet64 ~ # mount /dev /mnt/linux/dev -o bind
pet64 ~ # ls /mnt/linux/dev | wc -l
753
pet64 ~ # grep mnt /etc/mtab
/dev/sda6 /mnt/linux ext4 rw,relatime,user_xattr,acl,barrier=1,data=ordered 0 0
udev /mnt/linux/dev devtmpfs rw,nosuid,relatime,size=10240k,nr_inodes=1020813,mode=755 0 0
p
pet64 ~ # ls -l /etc/mtab
lrwxrwxrwx 1 root root 17 Май 15 04:40 /etc/mtab -> /proc/self/mounts
pet64 ~ # umount /mnt/linux/dev
pet64 ~ # ls /mnt/linux/dev | wc -l
22

pet64 ~ # mkdir /tmp/bind
pet64 ~ # mount /bin /tmp/bind -o bind
pet64 ~ # ls /tmp/bind | wc -l
131
pet64 ~ # umount /tmp/bind
pet64 ~ # rmdir /tmp/bind

Ни разу нигде не заикнулось
Дай юз-кейс, где должны проявиться глюки.

imul ★★★★★
()

>первоначальное назначение каталога /sbin (размещение статически собранных файлов, на что указывает буква «s») давно неактуально;

http://www.pathname.com/fhs/pub/fhs-2.3.html#SBINSYSTEMBINARIES

Utilities used for system administration (and other root-only commands) are stored in /sbin, /usr/sbin, and /usr/local/sbin. /sbin contains binaries essential for booting, restoring, recovering, and/or repairing the system in addition to the binaries in /bin.

По-моему, Поттеринг сам FHS не читал.

anonymous
()
Ответ на: комментарий от DukE-M

>> Вот наркоманы! А если у меня /usr отвалится, то у меня даже mount не будет! Ну и сказка.

mount есть в initrd.

Хм, действительно. Глупость чуть выше написал.

Magister2k7
()
Ответ на: комментарий от Magister2k7

Для монтирования /usr Жопперинг зальёт slackware в initrd. Кстати, идея! Зачем грузиться с жёстких дисков? Давайте весь / и /usr зальём в initrd, и все проблемы исчезнут. Подумаешь, что генерироваться будет такой initrd чуть дольше обычного, зато systemd точно глючить не будет!

anonymous
()
Ответ на: комментарий от anonymous

> давно пора довести до ума феерию идиотизма под названием «FHS»

Фу таким тупым аноном быть!

anonymous
()
Ответ на: комментарий от anonymous

Ты предлагаешь объединить две разные задачи в одну. Зачем? Может давай сразу запхнем initrd вместе с ядром в bios, чего уж там мелочиться? Надо только туда еще Х-ы с гномом добавить.

Кончай передергивать.

Пусть у нас есть 2 раздела — / и /usr. Раньше для запуска системы, initrd был обязан смонтировать только /. Теперь он обязан смонтировать / и /usr. Ну и что? Принципиально ничего не изменилось. Допилим скрипт для initrd и будем передавать в параметрах ядра не 1 параметр root, а 2 параметра — root и usr. Не проблема.

geekless ★★
()
Ответ на: комментарий от anonymous

> В том что ты озвучил не тот аргумент, прочитай заголовок темы еще раз.

Какой аргумент я по твоему был обязан озвучить?

Золотые слова, только надо добавить: «Пусть пишут программы (systemd), не запускающие скрипты и программы для работы которых нужен /usr/{,s}bin, пока /usr не подмонтирован.»


Да я только за.

Вон geekless выше из initrd предлагает монтировать, замечательно, однако почему мне сейчас запрещают отдельный раздел на /usr делать, запилите все корректно сначала потом уже и systemd предлагайте.


Бггг, так это к нему уже вопрос. Я не совсем он. Мне самому хотелось бы, чтобы systemd не занималась в системе внезапной ерундой.

imul ★★★★★
()
Ответ на: комментарий от imul

> Ни разу нигде не заикнулось

Дай юз-кейс, где должны проявиться глюки.


Еще раз:

# mkdir /tmp/bind
# mount /bin /tmp/bind -o bind
# umount /bin

# mkdir /tmp/iso
# mount livecd.iso /tmp/iso -o loop,ro
# umount livecd.iso

anonymous
()
Ответ на: комментарий от Jayrome

>Он что, перестанет работать?

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

А в целом, не считаю вопрос сильно принципиальным.

Binary ★★★★★
()
Ответ на: комментарий от geekless

А если у меня нет initrd? Грузится без него система, мне теперь специально для этого поделия делать initrd? Gentoo, все нужные модули в ядре.

anonymous
()
Ответ на: комментарий от geekless

> Поделил на ноль.

Ты меня с кем-то путаешь, не делай так больше.

systemd меня вообще не интересует.


Тогда что ты здесь делаешь вообще?

Меня интересует различие алгоритмов загрузки системы, которое проистекает из этого изменения.


Из написанного тобой, это вообще никак не следует. Ты сюда потроллить прищёл, только и всего.

imul ★★★★★
()
Ответ на: комментарий от anonymous

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

anonymous
()
Ответ на: комментарий от anonymous

Это у тебя вызывает лютый butthurt FHS, что даже называешь это феерией идиотизма, вот только ни одного аргумента не привёл, смойся.

anonymous
()
Ответ на: комментарий от anonymous

Сейчас, подожди, изошник где-нибудь нарою, сделаю.

imul ★★★★★
()
Ответ на: комментарий от anonymous

> А если у меня нет initrd? Грузится без него система, мне теперь специально для этого поделия делать initrd? Gentoo, все нужные модули в ядре.

Ты, небось, генту юзаешь еще и ради процессоро-специфичных флагов оптимизации, да?

geekless ★★
()
Ответ на: комментарий от Darth_Revan

Зачем показывать непривелигерованному пользователю команды, которыми он всё равно не сможет воспользоваться?

/sbin/ifconfig не намекает?

первоначальное назначение каталога /sbin (размещение статически собранных файлов, на что указывает буква «s») давно неактуально;

KennyMinigun ★★★★★
()

>предлагается все исполняемые файлы помещать в каталог /usr/bin, а другие каталоги сделать символическими ссылками на него для совместимости

FHS, конечно, то ещё говно, но ёпта, ну опять не в ту степь поехали, да что за маразматики там сидят, а? что они решили этим? сократили число каталогов и довольны? слов нет

anonymous
()
Ответ на: комментарий от imul

Ого, какой лютый баттхерт. При чем, пациент, похоже, троллит сам себя: сам прочитал что-то своё в моём комменте, сам оскорбился, сам выложил пару кирпичей.

Лечись.

geekless ★★
()
Ответ на: комментарий от geekless

>> А если у меня нет initrd? Грузится без него система, мне теперь специально для этого поделия делать initrd? Gentoo, все нужные модули в ядре.

Ты, небось, генту юзаешь еще и ради процессоро-специфичных флагов оптимизации, да?

Я так понял, что это слив, ибо аргументов нет.

anonymous
()
Ответ на: комментарий от geekless

> Кончай передергивать.

> Пусть у нас есть 2 раздела — / и /usr. Раньше для запуска системы, initrd был обязан смонтировать только /. Теперь он обязан смонтировать / и /usr. Ну и что? Принципиально ничего не изменилось. Допилим скрипт для initrd и будем передавать в параметрах ядра не 1 параметр root, а 2 параметра — root и usr. Не проблема.

Да, это понятно, но зачем? Зачем этот разброд, почему именно /usr должен монтироваться из initrd, а остальное из корня? Или для /var тоже отдельный параметр? А если у меня будут еще какие-то разделы (/opt, /srv...) - для них будут свои параметры? Да, все это можно, но зачем?

anonymous
()

Отличная новость! Главный принцип Unix - простота. Я рад, что федоровцы вспомнили о нем. Надеюсь, разработчики других популярных дистрибутивов (Debian,openSuse,RHEL,Alt) последуют их примеру.

vkaravanov
()
Ответ на: комментарий от anonymous

> OpenSuSE 11.4, чистая установка, /run нет.

Будет в 12.1, по крайней мере вот только с Tumbleweed обновился - появилось.

KennyMinigun ★★★★★
()
Ответ на: комментарий от anonymous

>Это у тебя вызывает лютый butthurt FHS

он у меня вызывает недоумение - как можно было такую УГшную иерархию придумать

ни одного аргумента не привёл

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

достаточно?

теперь вякни что-нибудь типа «вали на венду» или «ненужно»

anonymous
()
Ответ на: комментарий от anonymous

> Я так понял, что это слив, ибо аргументов нет.

На гентушников, ночами компиляющих ядра, не действуют аргументы — проверено. Если в качестве аргумента я скажу, что перенос системы на другое железо у меня занимает 2 минуты на загрузку в Tiny Core и перегенерацию initrd для Арча, а не полчаса на правку конфига и пересборку ядра, то ты ведь не воспримешь это как аргумент, верно?

geekless ★★
()
Ответ на: комментарий от anonymous

> umount livecd.iso

Вообще-то прочти для начала man umount
Либо надо отмонтировать
umount /tmp/iso
либо
umount /dev/loopN

imul ★★★★★
()
Ответ на: комментарий от imul

>> umount /bin

Вах! Это так у тебя глючит-то?

Ты ж сам пример с /bin-ом привел. А у меня - не глючит, у меня нет симлинка на mtab, и все работает без проблем.

anonymous
()
Ответ на: комментарий от geekless

> Ого, какой лютый баттхерт.
Где?

При чем, пациент, похоже, троллит сам себя: сам прочитал что-то своё в моём комменте, сам оскорбился, сам выложил пару кирпичей.

Иди проспись уже.

imul ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.