Назад | Перейти на главную страницу

Загружать пакеты через apt без прав root

Я работаю над сценарием, чтобы показать различия между файлами конфигурации в системе и файлами, предоставленными в исходном пакете. У меня почти все это работает, за исключением использования apt для загрузки пакетов без root. Есть простой способ сделать это?


Редактировать: Я изучил «хакерские» варианты сценариев wget, но основная проблема, с которой я столкнулся, заключается в том, как вы определяете, из какого репо пытаться получить пакет. Он не включен ни в один вывод apt-cache, который я вижу.

Вы можете настроить без пароля sudo для aptitude --download-only? Или вы можете проанализировать вывод различных команд apt и вручную загрузить оттуда файл. Существуют сторонние библиотеки для работы с libapt, например python-apt

Просто aptitude download Это:

$ ls vim*.deb
ls: vim*.deb: No such file or directory

$ aptitude download vim
[...]
Fetched 835kB in 0s (2933kB/s)

$ ls vim*.deb
vim_1%3a7.0-122+1etch5_amd64.deb

$ id
uid=1000(earl) gid=100(users) groups=100(users)

dget делает именно то, что вы хотите. На странице руководства:

Во второй форме dget загружает двоичный пакет (т.е. файл .deb) с зеркала Debian, настроенного в /etc/apt/sources.list(.d). В отличие от apt-get install -d, он не требует прав суперпользователя, выполняет запись в текущий каталог и не загружает зависимости.

wget можно использовать для загрузки пакетов в каталог, доступный для записи пользователем, который отвечает на ваш вопрос, если только в вашем вопросе нет скрытого требования, чтобы фактически УСТАНОВИТЬ пакеты.

Попробуйте использовать базовые библиотеки pkg_apt? Хотя они, вероятно, сделают ваш скрипт несколько более сложным, а iirc находится на Perl, поэтому вам потребуется его использовать.

Расположение репозиториев находится в /etc/apt/sources.list и /etc/apt/sources.list.d/*, чтобы вы могли использовать их для составления списка репозиториев. Затем попробуйте их все с помощью wget для определения местоположения пакета. Это грубая сила, но она сработает.

Например, эта запись deb http: / / us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse становится wget http://us.archive.ubuntu.com/ubuntu/jaunty-updates/multiverse/i386/packagename