Як apt-get use / var / cache / apt / archives / lock?


3

Мені цікаво, як /var/cache/apt/archives/lockвживаються apt-get. Я з’ясував, що це звичайний файл, і я думаю, що він використовується, викликаючи flockйого кожен раз, коли apt-getпотрібно внести деякі зміни /var/cache/apt/archives.


Також дивіться: askubuntu.com/a/976982/158442
muru

Відповіді:


2

Коротка відповідь - aptце використання fcntlдля керування файлами блокування.


Залежно від того, що ви робите різні блокування, буде створено apt, давайте розглянемо, за sudo apt updateщо apt-pkg/update.ccвідповідає, і виконаємо цю умову, перш ніж актуалізувати наші списки джерел:

if (Fetcher.GetLock(_config->FindDir("Dir::State::Lists")) == false)

Зауважте, що _config->FindDir("Dir::State::Lists")повернеться:, /listsви можете дізнатися це, запустивши:

$ apt-config dump | grep lists
Dir::State::lists "lists/";

Так GetLock()буде створений файл блокування /var/lib/apt/lists/, і якщо я запускаю інший sudo apt updateпроцес, я отримаю:

Reading package lists... Done
E: Could not get lock /var/lib/apt/lists/lock ...
E: Unable to lock directory /var/lib/apt/lists/

GetLock()сама живе тут apt-pkg/contrib/fileutl.cc:

Давайте подивимось на його коментар:

// GetLock - Gets a lock file                       /*{{{*/
// ---------------------------------------------------------------------
/* This will create an empty file of the given name and lock it. Once this
   is done all other calls to GetLock in any other process will fail with
   -1. The return result is the fd of the file, the call should call
   close at some time. */

Тож наступного разу, коли я запускаю apt updateцю функцію замість створення файлу блокування, повернеться, -1і наш стан вийде з ладу, і ми отримаємо помилку.

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

По суті fileutl.cc, це утиліта файлів, що містить дві основні функції, що визначає GetLockяк "маніпуляцію із файлом блокування файлів із блоком dpkg".

fcntlсама забезпечує купу системних викликів для управління дескрипторами файлів. Однією з функцій, яку надає, fcntlє " блокування записів POSIX, також відомі як блокування, пов'язане з процесом ":

man 2 fcntl

І я впевнений, що ви вже знаєте ідею використання файлів блокування, але щоб переконатися, що всі, хто приходить сюди, знають про це:

Яка мета блокування файлу?


Так /var/cache/apt/archives/lockне використовуються?
Цзяхао Сю

@JiaHaoXu Так, він використовується ..., але aptне використовується flockдля управління процесом блокування. він має власні функції, які використовує fcntl.
Ravexina

@ Ravexina Я бачу ... А чи можете ви пояснити, як це використовується?
Цзяхао Сю

@JiaHaoXu Я думаю, я вже згадував усі необхідні частини, ви повинні прочитати джерела, щоб дізнатися, що саме тут відбувається. Що ти шукаєш? тож ми можемо допомогти вам саме в цьому.
Ravexina

Вибачте, що не прочитав цю статтю.
JiaHao Xu

1

Apt і dpkg використовують фіксатори (в /var/lib/, ні /var/cache), щоб забезпечити правильність синхронізації дій управління пакетом та бази даних пакетів.

Це означає, що якщо ви встановите або вилучите пакунок (як-от helloпакет), база даних буде точною, і ваш менеджер пакунків правильно покаже правильний стан пакета.

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


Він запитує, як це робиться за сценою, я думаю, він уже повинен знати, чому ...
Ravexina

Отже, що /var/cache/apt/archives/lockнасправді робить?
Цзяхао Сю

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