Debian и его производные

Рассмотрено использование ряда средств, специфичных для варианта Debian системы GNU — и его производных.

Номинальный вклад этой работы в оценку — 10 единиц.

Система управления пакетами APT

  1. (1 ед.) Подберите критерии поиска пакета в хранилище Debian так, чтобы результат запроса состоял из ровно 7 ÷ 13 пакетов. Опишите два пакета из результирующего списка.

    Пример: поиск пакетов в базе данных APT.
    $ apt-cache search -- hello 
    grhino - othello/reversi boardgame
    grhino-data - othello/reversi boardgame - data-files
    hello - example package based on GNU hello
    hello-traditional - example package not using any helper package
    iagno - popular Othello game for GNOME
    jester - board game similar to Othello
    quarry - Board games Go, Amazons, and Reversi (a.k.a. Othello)
    ruby-mixlib-shellout - mixin library for subprocess management, output collection
    $ 
    
  2. (2 ед.) Изучите действия, которые будут выполнены при установке какого-либо из не установленных в данный момент в системе пакетов (apt-get -s install -- имя-пакета.) Объясните вывод команды — по одной строке Conf, Inst, а также по одному пакету из каждого «:-раздела».

    Пример: моделирование установки пакета и его зависимостей.
    $ apt-get -s install -- newsboat 
    NOTE: This is only a simulation!
          apt-get needs root privileges for real execution.
          Keep also in mind that locking is deactivated,
          so don't depend on the relevance to the real current situation!
    Reading package lists...
    Building dependency tree...
    Reading state information...
    The following additional packages will be installed:
      libstfl0
    The following NEW packages will be installed:
      libstfl0 newsboat
    0 upgraded, 2 newly installed, 0 to remove and 44 not upgraded.
    1 not fully installed or removed.
    Inst libstfl0 (0.22-1.3+b10 Debian:10.3/stable, Debian:testing [amd64])
    Inst newsboat (2.13-1+deb10u1 Debian:10.3/stable [amd64])
    Conf libstfl0 (0.22-1.3+b10 Debian:10.3/stable, Debian:testing [amd64])
    Conf newsboat (2.13-1+deb10u1 Debian:10.3/stable [amd64])
    $ 
    
  3. (1 ед.) Как правило, команда apt-get install выполняется администратором для установки и удаления пакетов. Однако, ее также можно применить для загрузки пакетов, что, при соответствующих изменениях в настройках, будет доступно и рядовому пользователю.

    Получите из хранилища Debian какой-либо набор пакетов приемлемого объема (например, не более порядка 8 MiB в сумме.)

    Пример: получение файлов пакетов и их зависимостей.
    $ mktemp -d -- /tmp/archive.XXXXXXXX 
    /tmp/archive.7QhVc5oi
    $ apt-get -Vd -o Debug::NoLocking=true \
          -o Dir::Cache::Archives=/tmp/archive.7QhVc5oi \
          install -- hello 
    Reading package lists...
    Building dependency tree...
    Reading state information...
    The following NEW packages will be installed:
       hello (2.10-2)
    0 upgraded, 1 newly installed, 0 to remove and 44 not upgraded.
    1 not fully installed or removed.
    Need to get 56.1 kB of archives.
    After this operation, 287 kB of additional disk space will be used.
    Get:1 http://cdn-fastly.deb.debian.org/debian buster/main amd64 hello amd64 2.10-2 [56.1 kB]
    Fetched 56.1 kB in 1s (57 kB/s)
    Download complete and in download only mode
    $ 
    

Низкоуровневые инструменты; dpkg

  1. (1 ед.) Выполните запрос к базе данных dpkg используя dpkg-query -l или dpkg-query -s. Опишите три строки вывода.

  2. (2 ед.) Изучите и опишите устройство какого-либо .deb-файла используя dpkg-deb.

  3. (1 ед.) Хотя пакеты Debian разрабатываются в предположении, что они будут установлены администратором в системе, для некоторых из них это не является строго необходимым — достаточно лишь распаковать их (вместе, быть может, с их зависимостями) под какой-либо директорией и соответствующим образом настроить пути поискаPATH, LD_LIBRARY_PATH, etc.

    Запустите какую-либо из загруженных из хранилища Debian неустановленных в системе программ.

    Пример: распаковка загруженных файлов пакетов.
    $ mktemp -d -- /tmp/deb.XXXXXXXX 
    /tmp/deb.wsOzrPco
    $ sh -Ceuc 'd=${1} ; shift ; 
    for f ; do dpkg-deb -x -- "$f" "$d" ; done ; ' dummy.sh \
          /tmp/deb.wsOzrPco /tmp/archive.7QhVc5oi/*_*_*.deb 
    $ 
    
    Пример: запуск программы из распакованного пакета.
    $ PATH="$PATH"\
    :/tmp/deb.wsOzrPco/usr/bin\
    :/tmp/deb.wsOzrPco/bin \
          LD_LIBRARY_PATH=\
    /tmp/deb.wsOzrPco/lib/x86_64-linux-gnu:\
    /tmp/deb.wsOzrPco/usr/lib/x86_64-linux-gnu \
          /tmp/deb.wsOzrPco/usr/bin/hello 
    Hello, world!
    $ 
    
  4. (1 ед.) В некоторых случаях пакеты Debian содержат ошибочные (избыточные) зависимости (поле Depends:.) Установить такой пакет без фактической установки пакета, от которого он зависит, можно установив взамен последнего «фиктивный» пакет, содержащий описание зависимости в поле Provides:.

    Сформируйте такой пакет. Объясните его устройство.

    Пример: создание «пакета-заглушки» программой nope.sh.
    $ NOPE_EMAIL=jrh@example.net \
          NOPE_DPKG_DEB=dpkg-deb\ -Zgzip \
          fakeroot -- sh nope.sh  libgl1-mesa-dri 
    dpkg-deb: building package ‘no-libgl1-mesa-dri’ in ‘./no-libgl1-mesa-dri_0.1_all.deb’.
    $ 
    
  5. (2 ед.) Выполните сборку пакета из исходного кода (например, используя debuild.) Опишите основные этапы сборки. Удостоверьтесь в работоспособности полученного «установочного» (англ. binary) пакета.

Оформление отчета

  1. (1 ед.) Оформите отчет в виде документа HTML.

    Обратите внимание на то, что документ должен не только корректно воспроизводится соответствующим программным обеспечением, но и успешно проходить формальную проверку с использованием http://html5.validator.nu/ и (или) иных подобных средств. Элементы и атрибуты HTML должны быть использованы семантически-обоснованно — сообразно смыслу, которым их наделяет текущая практика и актуальные спецификации.

  2. (1 ед.) Сообщите о ранее неизвестной ошибке в Debian опубликовав отчет в системе учета проблем (http://debbugs.debian.org/.) Получите подтверждение разработчика о том, что ошибка действительно обнаруживается.

  3. (2 ед.) Включите в отчет о проблеме возможное решение (patch.) Удостоверьтесь в том, что изменения было включено разработчиком в новую редакцию исходного кода пакета.