Де я повинен розмістити кеш-програм для додатків на базі Unix?


10

Я будую додаток командного рядка, і мені потрібно зберегти деякі темп-дані у файли. Я не знаю, де є умова для додатків для зберігання кешу в системах на базі Unix (в даному випадку Ubuntu 12.0.4)?

Відповіді:


12

"Системи на базі Unix" - це занадто загальна категорія, щоб робити будь-які загальноприйнятні визначення, які застосовуватимуться до всіх систем на базі Unix. Проблема полягає в тому, що структура файлової системи (і "правильне" / "звичайне" місце для розміщення речей) настільки диво відрізняється між різними смаками "Unix" (якщо ви навіть можете це так назвати), що вам досить доведеться впоратися з цим у кожному конкретному випадку.

Кілька прикладів:

  • У Ubuntu 64-бітні бібліотеки переходять у / usr / lib або / usr / lib / x86_64-linux /, а 32-бітні бібліотеки переходять у / usr / lib32
  • У Fedora 64-бітні бібліотеки переходять у / usr / lib64, а 32-розрядні бібліотеки переходять у / usr / lib
  • Fedora більше не має поняття / lib або / bin (вони просто посилаються на еквівалентні каталоги / usr)
  • Більшість дистрибутивів Linux вважають за краще встановлювати встановлене користувачем програмне забезпечення (тобто програмне забезпечення, яке не надається менеджером пакунків) у / usr / local / (з lib, bin тощо, var тощо) у / usr / local /)
  • Багато дистрибутивів Linux використовують / var / cache для кешу, хоча якщо він "тимчасовий" (не має значення, якщо він загубився), він може зберігатися в / tmp
  • Деякі програми типу "додаток у папці" зберігають все у підкаталозі / opt (особливо установці clickwrap)
  • Деякі програми просто встановлюються у підкаталог ~ каталогу користувача (як правило, / home / username)
  • У Solaris я бачив / srv, який використовується аналогічно / opt, або іноді / srv є www-root

Відповідь полягає в тому, що канонічна, соціально прийнятна, добре інтегрована конвенція щодо того, де зберігати що-небудь у будь-якій операційній системі, будь то дистрибутив Linux, BSD, Solaris, HP-UX тощо, залежить від конкретних обставин . Конкретно:

  • Як розподіляється пакет?
  • Чи потрібен користувачеві root доступ для його встановлення?
  • Чи залежить пакет або інтегрується безпосередньо з іншими пакетами, які вже є в системі, наприклад, плагіном або додатком?
  • Чи буде пакет інтегрований до сховищ верхніх частин дистрибутива, щоб користувачі могли використовувати таку команду, як apt-getабо yumвстановити її безпосередньо, не завантажуючи інсталятор з веб-сайту?
  • Чи буде програмне забезпечення мати окрему конфігурацію для кожного іншого користувача, який керує комп'ютером?
  • Чи програмне забезпечення матиме налаштування глобальної конфігурації, які слід змінювати лише адміністратором (root)?
  • Чи потрібно програмне забезпечення інтегруватися із системою init (наприклад, для запуску при завантаженні)?

На це немає прямої відповіді без врахування всіх факторів. Однак, зокрема для Ubuntu 12.04 , якщо ви збираєте свій пакунок у .debфайл, який буде розповсюджуватися в PPA, або для подання у власні репозиторії ( mainабо universe) Ubuntu , я рекомендую зберігати кеш у /var/cache. Але це лише для Ubuntu, і ви, звичайно, не повинні застосовувати припущення, що кожен дистрибутив або ОС на базі Unix вважатиме це прийнятним.

Крім того, якщо немає переваг для збереження даних кешу в черевиках системи, я думаю, вони також можуть належати в / tmp.

Зауважте, що ви зіткнетеся з цими проблемами з конвенційними шляхами для кожного типу файлів, якими користується ваша програма: спільних даних, виконуваних файлів, бібліотек, файлів довідки, зображень, звуку, веб-сторінок тощо. Тому мені потрібно задуматися, якщо ви запитуєте про файли кешу, як ви плануєте обробляти інші типи файлів. Ви просто робите наївні припущення і сподіваєтесь, що ніхто з вами не погоджується? Якщо ви ще не читали жодних документів або стандартів Ubuntu, які б підказували, куди їх розмістити, погана ідея просто припустити те чи інше. Наприклад, завжди вставляти бібліотеки в / usr / lib може бути помилкою, оскільки залежно від ситуації вони можуть належати в іншому місці.

Крім того, як розробник програмного забезпечення, я думаю, що найвідповідальніше, що потрібно зробити, це дозволити кінцевому користувачеві вирішити, де розмістити свої файли. Ви можете встановити за замовчуванням, але користувачі (і дистриб'ютори) можуть і налаштувати збірку відповідно до їх дистрибутива.

Найпростіший спосіб зробити це - створити свою програму за допомогою GNU Autoconf . Autoconf - це система збірки, де користувач може передавати аргументи командного рядка до сценарію збірки, щоб змінити шляхи різних "типів каталогів" подалі від значень за замовчуванням. Практично в кожному дистрибутиві є сценарій збірки для кожного пакета Autoconf, який встановлює відповідні дистрибутивам звичайні каталоги для кожного типу. Вони навіть спеціально мають тип каталогу для кешу: sharedstatedir .


По-перше, дуже дякую за вашу відповідь, дуже детально. Характер програми (рубін) полягає в кешуванні викликів API, які обслуговують статичний вміст. Це рубінове додаток, і з того, що я прочитав у вашому місці відповідей для мого кеш-диска, буде /tmpпапка. Відповіді на ваші запитання були б (скачати, ні, ні, ні, ні, ні, ні). Для більшості людей, мабуть, здається нормальним висновок, /tmpале я новачок у системах Unix, і конвенції, засновані на ubuntu os, мені незнайомі. Це відкриває цікаву ідею для самоцвіту, щоб дозволити кешування агностичного диска (користувача агностика). Дякую, +1 від мене.
Дельфін

Зауважте, що система рубінових дорогоцінних каменів, встановлена ​​в більшості дистрибутивів Linux, має дуже специфічний каталог, де gemінструменти встановлюються інструментом. Однак, ймовірно, не було б доцільним створювати файли під час виконання у тому самому каталозі, де ваш додаток завантажується дорогоцінним каменем. З іншого боку, якщо ви користуєтеся додатком як користувач, вам потрібен каталог, який читають і записують для користувачів , а це означає або зміну дозволів (що вимагає ще більшої роботи системної інтеграції під час встановлення, наприклад створення групи тощо) або за допомогою глобального каталогу читання-запису, наприклад / tmp.
allquixotic

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