Apt - пакетный менеджер (ПМ) Debian, Ubuntu и пр.

Операции с пакетами

  • Обновить
    • списки пакетов в репозитории : apt-get update
    • все установленные пакеты: apt-get upgrade
  • Установить
    • пакет из репозитория без рекомендованных пакетов : apt-get install имя_пакета –no-install-recommends
      • с заменой имеющихся файлов :
        apt install -o DPkg::options::="--force-overwrite" имя_пакета 
    • локальный пакет : dpkg -i /путь/пакет.deb && apt -f install
      • с заменой имеющихся файлов : dpkg –force-overwrite -i /путь/пакет.deb
  • Загрузить пакет без установки : apt-get install имя_пакета -d –reinstall или apt-get download имя_пакета
  • Показать установленные пакеты : dpkg -l
  • Удалить
    • пакет : apt-get purge пакет
    • неиспользуемые пакеты : apt-get autoremove
    • неиспользуемых пакетов : deborphan (отдельная программа)
    • название установленного пакета по его файлу : dpkg -S файл
    • пакета в репозитории по его файлу : apt-file update && apt-file search файл
  • Распаковать пакет : dpkg-deb –extract имя_пакета /путь/к/директории
  • Заблокировать обновление пакета : apt-mark hold имя_пакета
    • разблокировать: apt-mark unhold имя_пакета
    • смотреть заблокированные : apt-mark showhold

Debian Backports - свежие версии программ

Cоздание deb пакета

  • Для чего - например опакетить свои скрипты.
  • Т.к. используются только ar tar gz - работать будет в любом линуксе
  • С бинарниками сложнее - необходима проверка зависимостей в deb дистрибутиве

Компиляция

Создание простого пакета.deb

  1. mkdir tmp
  2. Копируем в tmp свои файлы (иерархия от корня)
  3. deb-make tmp - создает шаблон файла описания 'control'
  4. Редактируем control (описание пакета)
  5. deb-make tmp - получаем то_что_написали_в_control.deb

Скрипт deb-make

#!/bin/sh
#170519 sfs
#http://webhamster.ru/mytetrashare/index/mtb0/2046
#https://debian-handbook.info/browse/ru-RU/stable/packaging-system.html
[ ! -d "$1" ] && echo "Create .deb from directory
    Usage $o direttory_name" && exit 1 

if [ -f control ] ;then
    [ "`cat control |wc -m`" = "352" ] && echo "Edit file 'control'" && exit 1
else
 echo "\
Package: licq-plugin-icqnd
Architecture: i386
Depends: licq, adobe-flashplugin (= 1:20170509.1-0ubuntu0.14.04.1), libc6 (>= 2.7)
Provides: licq-plugin
Priority: optional
Version: 0.1.9.3
Maintainer: nobody care
Description: graphical user interface plug-in for Licq using GTK2
This package provides the GTK2-based graphical user interface to the Licq
" >control && echo "File 'control' created/ Edit it" && exit
fi
tar czf control.tar.gz control
echo 2.0 > debian-binary
cd "$1" && tar czf ../data.tar.gz *
cd ..
A(){ awk '/^'$1':/ {print $2}' control  ; }
ar -qS "`A Package`_`A Version`_`A Architecture`".deb debian-binary control.tar.gz data.tar.gz

То же самое с dpkg-deb

  • Создать новую директорию, например /tmp/package
  • Находясь в каталоге с исходниками, выполнить команду
make install DESTDIR=/tmp/package
dpkg-deb -b /tmp/package package_name.deb

Еще можно использовать checkinstall

Перепаковка deb

  • Все делаем от root
  • Распаковываем deb в каталог /tmp/package : dpkg-deb -R package_name.deb /tmp/package
  • dpkg-deb -b /tmp/package package_name.deb

Просмотр control внутри .deb

#!/bin/sh
[ ! "$1" ] && echo "List 'control' from .deb
    Usage $o *.deb" && exit 1 
ar p "$1" control.tar.gz |tar -O -xzf -

Создание репозитория

Создание локальной копии репозитория

Приоритет репозитория

Печать/экспорт