Які альтернативи FHS?


32

Я давно користувач Linux понад 15 років, але одне, що я ненавиджу з пристрастю, - це нав'язана структура каталогів. Мені не подобається , що /usr/binє звалищем для бінарних файлів або LIBS в /usr/lib, /usr/lib32, /usr/libx32, /lib, і /lib32т.д. ... Випадковий матеріал в і /usr/shareт.д. Це німий і заплутаним. Але деяким це подобається і смаки відрізняються.

Я хочу структуру каталогів, де кожен пакет ізольовані. Уявіть собі, якщо дракон медіаплеєра мав власну структуру:

/software/dragon
/software/dragon/bin/x86/dragon
/software/dragon/doc/README
/software/dragon/doc/copyright
/software/dragon/lib/x86/libdragon.so

Або:

/software/zlib/include/zlib.h
/software/zlib/lib/1.2.8/x86/libz.so
/software/zlib/lib/1.2.8/x64/libz.so
/software/zlib/doc/examples/...
/software/zlib/man/...

Ви отримуєте бал. Які мої варіанти? Чи є дистрибутив Linux, який використовує щось на зразок моєї схеми? Чи можна змінити якийсь дистрибутив, щоб він працював так, як я хочу (Gentoo ??) або мені потрібен LFS? Чи є в цій галузі якісь рівні техніки? Як публікації про те, чи схема реальна чи нездійсненна?

Не шукаю ОС X. :) Але натхненна ОС X абсолютно нормально.

Edit : я поняття не маю , як PATH, LD_LIBRARY_PATHі інші змінні оточення , які залежать від невеликого набору шляхів повинні працювати. Я маю в виду , що якщо у мене є редактор KDE Кейт встановлений в /software/kate/bin/x86/bin/kateте , що я в порядку з того , щоб ввести повний шлях до двійкового файлу для його запуску. Як це має працювати для динамічних бібліотек та dlopenдзвінків, я не знаю, але це не може бути нерозв'язною інженерною проблемою.


3
Як виглядатиме ваш шлях пошуку, якщо всі ваші бінарні файли ховаються всюди? Як оновити шлях у вже запущених процесах / сесіях, коли ви встановлюєте програмне забезпечення після їх запуску? Які ваші заходи безпеки полягають у тому, щоб перешкодити звичайному користувачеві якось змінити бінарний файл у якійсь незрозумілій гілці бін? Ви, безумовно, втрачаєте комфорт, можливо, зробивши / usr розділ лише для читання, можливо, загальну мережеву установку для багатьох машин ...
Hagen von Eitzen

1
@HagenvonEitzen Але (використовуючи схему іменування ОП і приклади), ви можете зробити /softwareзамість них лише читання, для тих же переваг і недоліків, що /usrі для FHS.
CVn

Динамічні бібліотеки можуть використовувати імена встановлення або RPATH.
asmeurer

1
Ваше запитання нагадало мені cr.yp.to/slashpackage.html . Не впевнений, що це відносно.
блі

Відповіді:


50

По-перше, попередня відмова від конфлікту інтересів: я давно розробник GoboLinux.

По-друге, напередодні вимоги доменної експертизи: я давно розробник GoboLinux.

У поточному використанні є кілька різних структур. GoboLinux має такий, і такі інструменти, як GNU Stow , Homebrew тощо, використовують щось досить схоже (в першу чергу для програм користувача). NixOS також використовує нестандартну ієрархію програм та філософії життя. Це також досить поширений експеримент LFS.

Я збираюся описати все це, а потім прокоментую досвід, як це відбувається на практиці ("здійсненність"). Коротка відповідь полягає в тому, що так, це можливо, але ви повинні дійсно цього бажати .


GoboLinux

GoboLinux має структуру, дуже схожу на описану вами. Програмне забезпечення встановлюється під /Programs: /Programs/ZSH/5.0.8містить всі файли , що належать ZSH 5.0.8, в звичайних bin/ lib/ ... каталогах. Системні інструменти створюють посилання на ті файли в /System/Linksієрархії, які відображаються на /usr¹. PATHМінлива містить тільки єдиний уніфікований виконуваний каталог, і LD_LIBRARY_PATHне використовується. Кілька версій програмного забезпечення можуть співіснувати одночасно, але тільки один файл із заданим іменем ( bin/zsh) буде зв’язаний активно відразу. Ви можете отримати доступ до інших по повному шляху.

Набір сімлінок сумісності також існує, так /binі /usr/binкарти до єдиної директорії виконуваних файлів, і так далі. Це полегшує життя програмного забезпечення під час роботи. Патч ядра, GoboHide, дозволяє приховувати ці посилання на сумісність від списків файлів (але все ще проходять).

На противагу іншій відповіді, вам не потрібно змінювати код ядра: GoboHide суто косметичний, і ядро ​​взагалі не залежить від шляхів простір користувачів². GoboLinux має замовлену систему init, але цього також робити не потрібно.

Мітка завжди була "файлова система - менеджер пакунків", але в системі є досить звичайні засоби управління пакетами. Ви можете все робити cp, rmі ln, хоча.

Якщо ви хочете використовувати GoboLinux, ви дуже раді. Я зазначу, що це невелика команда розробників, і ви, ймовірно, виявите, що якесь програмне забезпечення, яке ви хочете, не упаковується, якщо ніхто раніше не хотів ним користуватися. Хороша новина полягає в тому, що побудувати програму для системи взагалі досить просто (стандартний "рецепт" триває близько трьох рядків); погана новина полягає в тому, що іноді це неприємно складно, про що я розповім докладніше нижче.

Публікації

Є кілька «публікацій». Я виступив з презентацією на linux.conf.au 2010 про систему в цілому, яка охоплює все в цілому, що доступне у відео: ogv mp4 (також у вашому локальному дзеркалі Linux в Австралії); Я також записував свої замітки до прози. На веб-сайті GoboLinux також є декілька старих документів, серед яких відомий " Я не знаю " , де розглядаються деякі заперечення та проблеми. Я думаю, що всі ми трохи менше гунг-хо в ці дні, і я підозрюю, що майбутній реліз буде прийнятий як базове місце для посилань./usr


NixOS

NixOS ставить кожну встановлену програму у свій каталог під /nix/store. Ці каталоги названі чимось на кшталт /nix/store/5rnfzla9kcx4mj5zdc7nlnv8na1najvg-firefox-3.5.4/- є криптографічний хеш, який представляє весь набір залежностей і конфігурації, що ведуть до цієї програми. Всередині цього каталогу знаходяться всі пов’язані файли з більш-менш нормальними локальними місцями.

Це також дозволяє мати декілька версій одночасно та використовувати будь-яку з них. NixOS має цілу філософію, пов’язану з нею відтворюваної конфігурації: вона по суті має систему управління конфігурацією, вкладену в неї з самого початку. Він покладається на деякі екологічні маніпуляції, щоб представити користувачеві правильний світ встановлених програм.


LFS

Досить просто перейти через Linux From Scratch і налаштувати саме ту ієрархію, яку ви хочете: просто створіть каталоги та налаштуйте все, щоб встановити в потрібному місці. Я робив це кілька разів, будуючи експерименти з GoboLinux, і це не суттєво складніше, ніж звичайний LFS. У цьому випадку вам потрібно зробити посилання на сумісність; в іншому випадку це набагато важче, але обережне використання кріпильних з'єднань, можливо, може цього уникнути, якщо ви дійсно цього хотіли.

Я відчуваю, що був підказка LFS про саме це в один момент, але я не можу зараз знайти його.


Про доцільність

Справа в FHS полягає в тому, що це стандарт, він дуже поширений, і він широко відображає існуюче використання на той час, коли він був написаний. Більшість користувачів ніколи не будуть мати систему, яка по суті не дотримується цієї верстки. Результатом цього є те, що багато програмного забезпечення мають приховану залежність від нього, яку ніхто не усвідомлює, часто зовсім ненавмисно.

Усі ці сценарії #!/bin/bash? Нічого добре, якщо у вас там немає Баша. Ось чому GoboLinux має всі ці посилання на сумісність; це просто практично. Багато програмного забезпечення не спрацьовує ні під час збирання, ні під час запуску за нестандартним макетом, і тоді воно потребує виправлення, щоб виправити, часто досить нав'язливо.

Ваша основна програма Autoconf зазвичай із задоволенням встановлює себе там, де ви це скажете, і досить легко автоматизувати процес передачі в правильному --prefix. Інші системи побудови не завжди такі приємні, чи навмисно випікання в ієрархії, або провідні автори для написання не портативної конфігурації. CMake є головним правопорушником в останній категорії. Це означає, що якщо ви хочете жити в цьому світі, ви повинні бути готові до того, щоб зробити багато завзято працюючих в інших системах нарощування. Справжнє клопотання потрібно динамічно виправляти створені файли під час компіляції.

Виконання - знову інша справа. Багато програм мають припущення щодо того, де їх власні файли чи чужі файли знаходяться або відносно них, або абсолютно. Коли ви починаєте використовувати символьні посилання для представлення послідовного перегляду, у багатьох програмах виникають помилки, що обробляють їх (або іноді, напевно, правильна поведінка, яка вам не корисна). Наприклад, інструмент foobarможе очікувати, що він знайде bazвиконуваний поруч або в ньому ../sbin. Залежно від того, читає воно симпосилання чи ні, це можуть бути два різних місця, і жодне з них не може бути правильним.

Поєднана проблема - це /usr/shareкаталог. Це, звичайно, для спільних файлів, але коли ви вставляєте кожну програму у свій префікс, вони фактично не поділяються. Це призводить до того, що програми не можуть знайти стандартні піктограми тощо. GoboLinux розібрався з цим досить потворно: під час збирання $prefix/shareбуло символьним посиланням на $prefix/Shared, а після побудови посилання було вказано на глобальний shareкаталог. Тепер для використання share(та інших каталогів) тепер використовується пісочниця компіляції та руху файлів , але помилки під час читання посилань все ще можуть бути проблемою.

Набори декількох програм - ще одна проблема. GoboLinux ніколи не змушував GNOME працювати повноцінно, і я не вірю, що в NixOS це також є, тому що взаємозалежності компонування настільки випікані, що вилікувати їх усіх просто неможливо.

Так, так, це можливо , але:

  • В роботі над тим, щоб речі просто функціонували, досить багато.
  • Деякі програми можуть просто ніколи не працювати.
  • Люди будуть дивитись на вас смішно.

Все це може чи не може бути проблемою для вас.


Uses Використовується версія 14.01 /System/Index, яка відображається безпосередньо на /usr. Я підозрюю, що майбутня версія може відмовитись від ієрархії посилань / індексів та використовувати її на /usrвсій основі.

² Це вимагає /bin/shіснування за замовчуванням.


1
Чудова відповідь! Чи в основному автори програмного забезпечення сприйнятливі до патчів, щоб змусити їх працювати в gobolinux чи вороже ставитися до нього?
Бьорн Ліндквіст

Більшу частину часу виправлені патчі проходять добре, але іноді технічне обслуговування може бути дещо войовничим щодо опори на FHS. Я також пам’ятаю те, що керівники KDE наполягали на тому, що копіювати символьне посилання до немодифікованого файлу шаблону, а не перенаправляти його для копіювання файлу було задумано. Дуже багато виправлень перебуває від одного жорстко закодованого шляху до іншого, а не належного виправлення, тому їх не варто відправляти вгору за течією.
Майкл Гомер

Отже, якщо ви знайшли та фінансували (у часі чи грошах) створення / вилучення / виправлення всього програмного забезпечення, яке ви хочете / потребуєте, (так, як, наприклад, Apple / Microsoft), то ваш золотий? Ось це мені звучить. Мене занадто цікавлять передові норми, які не є ворожими до настільних радикалів, як це.
ThorSummoner

2
@ThorSummoner: Більшість дистрибутивів сильно виправляють все своє програмне забезпечення; що "фінансування" - це вже реальність. Ці виправлення - це сукупність функціональних і, так, змін шляхів, щоб відповідати особливостям дистрибуції. Звичайно, як кінцевий користувач, ти насправді цього не помічаєш, але він є - за розподілом багато праці, яку легко прийняти як належне. За великим рахунком, вам не потрібно виправляти речі - лише 13% рецептів GoboLinux взагалі містять будь-який патч, наприклад, який фактично нижчий, ніж, скажімо, Debian, - хоча це дратує такий виправлення, коли це робити необхідно.
Майкл Гомер

6

І GoboLinux (про який згадував F.sb), і GNU guix - це дистрибутиви, які використовують структуру каталогу каталогів на пакунках разом із посиланнями для вказівки на "поточну" версію бінарного файлу.

Здається, GoboLinux стане кращою ставкою, якщо ви хочете стабільної системи. GNU guix прямо говорить, що він ще не готовий до виробництва. GoboLinux існує вже багато років. Я ніколи себе не пробував.


5

перевірити GoboLinux .

якщо ви хочете, щоб структура каталогів була змінена, вам слід змінити якийсь код ядра, процес завантаження, рівні запуску каталогу на основі rc-файлів та менеджера пакунків, а потім структуру каталогів.


5

Linux FHS заснований на тому, що Sun і інші компанії UNIX вирішили наприкінці 1980-х.

Важливою зміною в той час було відмовитися /usr/local/і запровадити/opt/ / { bin! lib! man! ...}

Якщо ви шукаєте причину, чому / usr / bin сьогодні використовується як демпінг, я вважаю, що GNOME - це один із найвідповідальніших проектів.

Те, що сталося з 32-бітними та 64-бітовими бібліотеками, здається, спричинено FHS.

Solaris представив специфічні для платформи підкаталоги у /lib /usr/binта /usr/lib. Зроби своє бажання - як Sun удосконалив базову концепцію з 1988 року.


Я не бачу, що ви маєте на увазі, сказавши "покинути / usr / local". FHS конкретно згадує / usr / local , а також / opt .
CVn

2
Оригінальний FHS, розроблений Sun, HP, IBM, AT&T, SGI, звичайно, видалив несистемні та проблемні / usr / local. Я поняття не маю, чому люди Linux знову ввели цю помилку.
schily

2
"Зроби своє бажання, як Сонце покращило базову концепцію з 1988 року." Я не розумію цього речення.
Faheem Mitha

4

Якби кожен пакет мав власну частину файлової системи, вам знадобляться надзвичайно великі та громіздкі змінні середовища PATH,LD_LIBRARY_PATH і подібні.

Ви, звичайно, можете встановити пакунки самостійно таким чином, а потім використовувати щось на зразок модулів GNU для управління тим, чи є вони у вашому середовищі чи ні. Це те, що ми робимо для наукового програмного забезпечення, де я працюю, але ми цього не робимо системне програмне забезпечення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.