Вопрос или проблема
Я знаю, как проверить, доступны ли новые пакеты с правами root. Но как я могу сделать это из оболочки скрипта без sudo или редактирования sudoers. Я использую Debian 12 с openbox. Спасибо!
PS. Я знаю о пакетном индикаторе обновлений, но хотел бы использовать простое решение на оболочке.
Вы можете выполнить apt list --upgradable
, чтобы получить список всех известных доступных обновлений.
Тем не менее, это не будет совсем точно без предварительного обновления источников пакетов, что требует root
прав (sudo apt update
).
При выполнении apt update
от имени пользователя возникают следующие проблемы:
E: Не удалось открыть файл блокировки /var/lib/apt/lists/lock - open (13: Permission denied) E: Невозможно заблокировать директорию /var/lib/apt/lists/ W: Проблема с удалением файла /var/cache/apt/pkgcache.bin - RemoveCaches (13: Permission denied) W: Проблема с удалением файла /var/cache/apt/srcpkgcache.bin - RemoveCaches (13: Permission denied)
Таким образом, вам нужна локальная версия списков и кеша – по стандарту оба с доступом на чтение, но без разрешения на запись. С помощью apt-config dump
вы увидите список доступных опций и способы их изменения. Соответствующие из них следующие:
Dir::State "var/lib/apt";
Dir::State::lists "lists/";
Dir::Cache "var/cache/apt";
Dir::Cache::archives "archives/";
Dir::Cache::srcpkgcache "srcpkgcache.bin";
- Скопируйте списки и кеш в локальный каталог
mkdir /home/user/apt_local
cp -r /var/lib/apt/list /home/user/apt_local/lists
cp -r /var/cache/apt /home/user/apt_local/cache
- Запустите
apt
с измененными директориями
apt update -o DIR::State::lists=/home/user/apt_local/lists -o DIR::Cache=/home/user/apt_local/cache
apt list --upgradable -o DIR::State::lists=/home/user/apt_local/lists -o DIR::Cache=/home/user/apt_local/cache
Конечно, это легко означает локальную копию размером около 200 МБ, и вам придется всегда делать копию последнего состояния, чтобы получить правильные ответы.
Ответ или решение
Как проверить наличие новых пакетов в Debian 12 без прав root: пошаговое руководство
Вопрос обновления пакетов в Debian часто возникает у пользователей, у которых нет прав администратора. В этом руководстве мы рассмотрим, как проверить наличие обновлений, используя команды оболочки и изменив конфигурацию системы.
1. Проблема с правами доступа
Обычно для получения информации о доступных обновлениях в Debian требуется выполнять команду apt update
, которая обновляет локальный кеш пакетов. Однако это действие требует прав root, что может привести к ошибкам доступа:
E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
E: Unable to lock directory /var/lib/apt/lists/
2. Создание локального каталога для кеша
Чтобы обойти эту проблему, мы можем создать локальный каталог, в который скопируем необходимые файлы. Это позволит нам получить доступ к спискам пакетов и кешу без необходимости использовать sudo
.
Шаги для создания локального каталога:
-
Создайте локальную директорию для хранения списков и кеша:
mkdir -p ~/apt_local/lists mkdir -p ~/apt_local/cache
-
Скопируйте текущие списки и кеш из системных директорий в ваш локальный каталог. Для этого используйте команду
cp
:cp -r /var/lib/apt/lists/* ~/apt_local/lists/ cp -r /var/cache/apt/* ~/apt_local/cache/
3. Обновление локальных списков пакетов
Теперь мы можем использовать команду apt
, указав ей ваши локальные директории для чтения списков пакетов и кеша. Обратите внимание, что без выполнения apt update
данные могут быть не актуальными, так что стоит периодически повторять шаги по копированию.
Выполнение команды обновления с локальным кешом:
apt update -o Dir::State::lists=~/apt_local/lists -o Dir::Cache=~/apt_local/cache
4. Проверка доступных обновлений
После того как вы обновили локальные списки, вы можете проверить наличие обновлений с помощью следующей команды:
apt list --upgradable -o Dir::State::lists=~/apt_local/lists -o Dir::Cache=~/apt_local/cache
Заключение
Этот метод позволяет пользователям без прав root проверять наличие обновлений для пакетов в Debian 12, избегая проблем с доступом. Однако имейте в виду, что вам нужно будет повторять процесс копирования списков и кеша, чтобы поддерживать их в актуальном состоянии. Используя предложенные шаги, вы сможете легко следить за обновлениями своих пакетов и поддерживать систему в актуальном состоянии, даже не имея административного доступа.