From b6cb42cf240ce7a8dd34c560ea4b6bb90da9d3a9 Mon Sep 17 00:00:00 2001 From: vlpr Date: Fri, 13 Oct 2023 13:35:15 +0000 Subject: [PATCH] Solutions for 08 --- .../08_debian_package_management/solutions.md | 615 ++++++++++++++++++ module1/08_debian_package_management/tasks.md | 64 +- 2 files changed, 656 insertions(+), 23 deletions(-) create mode 100644 module1/08_debian_package_management/solutions.md diff --git a/module1/08_debian_package_management/solutions.md b/module1/08_debian_package_management/solutions.md new file mode 100644 index 0000000..ebb00bc --- /dev/null +++ b/module1/08_debian_package_management/solutions.md @@ -0,0 +1,615 @@ +# Решения + +Действия ниже производятся от пользователя `root`. + +### 0. +Обновите список пакетов из настроенных репозиториев в `/etc/apt/sources.list` командой `apt`. +``` +# apt update +``` + +Пример содержимого файла для Debian 12 +``` +# main состоит из DFSG-compliant пакетов, которым не требуется другое ПО из других зон. Эти пакеты считаются частью дистрибуции Debian +# contrib пакеты содержат DFSG-compliant ПО, но у них зависимостей из зоны main (возможно упакованы в non-free). +# non-free содержит ПО, которое не соответствует DFSG. + +# скомпилированные бинарные пакеты +deb http://deb.debian.org/debian/ bookworm main +# оригинальные исходные коды пакетов +deb-src http://deb.debian.org/debian/ bookworm main + +# некоторые пакеты для следующего 12.X обнвления доступны только из следующих веток +deb http://deb.debian.org/debian/ bookworm-updates main +deb-src http://deb.debian.org/debian/ bookworm-updates main + +# критические обновления пакетов для обнаруженных уязвимостей доступны из репозитория security.debian.org +deb http://security.debian.org/debian-security/ bookworm/updates main +deb-src http://security.debian.org/debian-security/ bookworm/updates main +``` + +### 1. +Установите пакет `apt-file` с помощью `apt`. +``` +# apt install apt-file +``` + +### 2. +Найдите с помощью `apt-file` пакет, содержащий команду `ar`. +``` +# apt-file search --regexp /bin/ar$ +root@stud12:~# apt-file search --regexp /bin/ar$ +amdgcn-tools: /usr/amdgcn-amdhsa/bin/ar +binutils: /usr/bin/ar +binutils-aarch64-linux-gnu: /usr/aarch64-linux-gnu/bin/ar +binutils-alpha-linux-gnu: /usr/alpha-linux-gnu/bin/ar +binutils-arc-linux-gnu: /usr/arc-linux-gnu/bin/ar +binutils-arm-linux-gnueabi: /usr/arm-linux-gnueabi/bin/ar +binutils-arm-linux-gnueabihf: /usr/arm-linux-gnueabihf/bin/ar +binutils-arm-none-eabi: /usr/lib/arm-none-eabi/bin/ar +binutils-avr: /usr/lib/avr/bin/ar +binutils-bpf: /usr/lib/bpf/bin/ar +binutils-djgpp: /usr/i386-pc-msdosdjgpp/bin/ar +binutils-h8300-hms: /usr/h8300-hitachi-coff/bin/ar +binutils-hppa-linux-gnu: /usr/hppa-linux-gnu/bin/ar +binutils-hppa64-linux-gnu: /usr/hppa64-linux-gnu/bin/ar +binutils-i686-gnu: /usr/i686-gnu/bin/ar +binutils-i686-kfreebsd-gnu: /usr/i686-kfreebsd-gnu/bin/ar +binutils-i686-linux-gnu: /usr/i686-linux-gnu/bin/ar +binutils-ia64-linux-gnu: /usr/ia64-linux-gnu/bin/ar +binutils-m68hc1x: /usr/m68hc11/bin/ar +binutils-m68k-linux-gnu: /usr/m68k-linux-gnu/bin/ar +binutils-mingw-w64-i686: /usr/i686-w64-mingw32/bin/ar +binutils-mingw-w64-x86-64: /usr/x86_64-w64-mingw32/bin/ar +binutils-mips-linux-gnu: /usr/mips-linux-gnu/bin/ar +binutils-mips64-linux-gnuabi64: /usr/mips64-linux-gnuabi64/bin/ar +binutils-mips64-linux-gnuabin32: /usr/mips64-linux-gnuabin32/bin/ar +binutils-mips64el-linux-gnuabi64: /usr/mips64el-linux-gnuabi64/bin/ar +binutils-mips64el-linux-gnuabin32: /usr/mips64el-linux-gnuabin32/bin/ar +binutils-mipsel-linux-gnu: /usr/mipsel-linux-gnu/bin/ar +binutils-mipsisa32r6-linux-gnu: /usr/mipsisa32r6-linux-gnu/bin/ar +binutils-mipsisa32r6el-linux-gnu: /usr/mipsisa32r6el-linux-gnu/bin/ar +binutils-mipsisa64r6-linux-gnuabi64: /usr/mipsisa64r6-linux-gnuabi64/bin/ar +binutils-mipsisa64r6-linux-gnuabin32: /usr/mipsisa64r6-linux-gnuabin32/bin/ar +binutils-mipsisa64r6el-linux-gnuabi64: /usr/mipsisa64r6el-linux-gnuabi64/bin/ar +binutils-mipsisa64r6el-linux-gnuabin32: /usr/mipsisa64r6el-linux-gnuabin32/bin/ar +binutils-or1k-elf: /usr/or1k-elf/bin/ar +binutils-powerpc-linux-gnu: /usr/powerpc-linux-gnu/bin/ar +binutils-powerpc64-linux-gnu: /usr/powerpc64-linux-gnu/bin/ar +binutils-powerpc64le-linux-gnu: /usr/powerpc64le-linux-gnu/bin/ar +binutils-riscv64-linux-gnu: /usr/riscv64-linux-gnu/bin/ar +binutils-riscv64-unknown-elf: /usr/lib/riscv64-unknown-elf/bin/ar +binutils-s390x-linux-gnu: /usr/s390x-linux-gnu/bin/ar +binutils-sh-elf: /usr/sh-elf/bin/ar +binutils-sh4-linux-gnu: /usr/sh4-linux-gnu/bin/ar +binutils-sparc64-linux-gnu: /usr/sparc64-linux-gnu/bin/ar +binutils-x86-64-kfreebsd-gnu: /usr/x86_64-kfreebsd-gnu/bin/ar +binutils-x86-64-linux-gnux32: /usr/x86_64-linux-gnux32/bin/ar +binutils-xtensa-lx106: /usr/lib/xtensa-lx106-elf/bin/ar +nvptx-tools: /usr/nvptx-none/bin/ar +``` + +### 3. +Определите с помощью команды `apt search`, какие варианты пакета содержащего команду `ar` доступны. Установите подходящий для вашей системы. +``` +# apt search binutils +binutils/stable,now 2.40-2 amd64 [installed] + GNU assembler, linker and binary utilities + +binutils-aarch64-linux-gnu/stable 2.40-2 amd64 + GNU binary utilities, for aarch64-linux-gnu target + +binutils-aarch64-linux-gnu-dbg/stable 2.40-2 amd64 + GNU binary utilities, for aarch64-linux-gnu target (debug symbols) + +binutils-alpha-linux-gnu/stable 2.40-2 amd64 + GNU binary utilities, for alpha-linux-gnu target + +binutils-alpha-linux-gnu-dbg/stable 2.40-2 amd64 + GNU binary utilities, for alpha-linux-gnu target (debug symbols) +... +``` +``` +# apt install binutils/stable +``` + +### 4. +Скачайте http://ftp.ru.debian.org/debian/pool/main/c/cmake/cmake_3.25.1-1_amd64.deb в отдельную папку. Перейдите в папку с пакетом и распакуйте .deb командой `ar -x путь-к-пакету`. В папке должны появиться: `control.tar.xz`, `data.tar.xz`, `debian-binary`. + +### 5. +Создайте папку `control` и распакуйте в неё `control.tar.xz` с помощью команды `tar xfC путь-к-архиву control`. Изучите содержимое. Сравните с выдачей `dpkg --info ` для `.deb` файла. + +``` +# cat control/control +Package: cmake +Version: 3.25.1-1 +Architecture: amd64 +Maintainer: Debian CMake Team +Installed-Size: 28897 +Depends: libarchive13 (>= 3.3.3), libc6 (>= 2.34), libcurl4 (>= 7.16.2), libexpat1 (>= 2.0.1), libgcc-s1 (>= 3.0), libjsoncpp25 (>= 1.9.5), librhash0 (>= 1.2.6), libstdc++6 (>= 12), libuv1 (>= 1.38.0), zlib1g (>= 1:1.1.4), cmake-data (= 3.25.1-1), procps +Recommends: gcc, make +Suggests: cmake-doc, cmake-format, elpa-cmake-mode, ninja-build +Section: devel +Priority: optional +Multi-Arch: foreign +Homepage: https://cmake.org/ +Description: cross-platform, open-source make system + CMake is used to control the software compilation process using + simple platform and compiler independent configuration files. CMake + generates native makefiles and workspaces that can be used in the + compiler environment of your choice. CMake is quite sophisticated: it + is possible to support complex environments requiring system + configuration, pre-processor generation, code generation, and template + instantiation. + +# cat debian-binary +2.0 +``` +``` +# dpkg --info cmake_3.25.1-1_amd64.deb + new Debian package, version 2.0. + size 8692248 bytes: control archive=1224 bytes. + 1045 bytes, 20 lines control + 778 bytes, 12 lines md5sums + Package: cmake + Version: 3.25.1-1 + Architecture: amd64 + Maintainer: Debian CMake Team + Installed-Size: 28897 + Depends: libarchive13 (>= 3.3.3), libc6 (>= 2.34), libcurl4 (>= 7.16.2), libexpat1 (>= 2.0.1), libgcc-s1 (>= 3.0), libjsoncpp25 (>= 1.9.5), librhash0 (>= 1.2.6), libstdc++6 (>= 12), libuv1 (>= 1.38.0), zlib1g (>= 1:1.1.4), cmake-data (= 3.25.1-1), procps + Recommends: gcc, make + Suggests: cmake-doc, cmake-format, elpa-cmake-mode, ninja-build + Section: devel + Priority: optional + Multi-Arch: foreign + Homepage: https://cmake.org/ + Description: cross-platform, open-source make system + CMake is used to control the software compilation process using + simple platform and compiler independent configuration files. CMake + generates native makefiles and workspaces that can be used in the + compiler environment of your choice. CMake is quite sophisticated: it + is possible to support complex environments requiring system + configuration, pre-processor generation, code generation, and template + instantiation. +``` +Выдача `dpkg --info` включает содержимое `debian-binary`, файла `control/control` и размеры содержимого `.deb`. + +### 6. +Создайте папку `data` и распакуйте в неё `data.tar.xz` с помощью команды `tar xfC путь-к-архиву data`. Изучите `data` с помощью команды `tree`. Сравните с выдачей `dpkg --contents ` для `.deb` файла. + +``` +# dpkg --contents cmake_3.25.1-1_amd64.deb +drwxr-xr-x root/root 0 2022-11-30 14:57 ./ +drwxr-xr-x root/root 0 2022-11-30 14:57 ./usr/ +drwxr-xr-x root/root 0 2022-11-30 14:57 ./usr/bin/ +-rwxr-xr-x root/root 9245840 2022-11-30 14:57 ./usr/bin/cmake +-rwxr-xr-x root/root 9544272 2022-11-30 14:57 ./usr/bin/cpack +-rwxr-xr-x root/root 10697872 2022-11-30 14:57 ./usr/bin/ctest +drwxr-xr-x root/root 0 2022-11-30 14:57 ./usr/share/ +drwxr-xr-x root/root 0 2022-11-30 14:57 ./usr/share/bash-completion/ +drwxr-xr-x root/root 0 2022-11-30 14:57 ./usr/share/bash-completion/completions/ +-rw-r--r-- root/root 6837 2022-11-30 08:57 ./usr/share/bash-completion/completions/cmake +-rw-r--r-- root/root 2870 2022-11-30 08:57 ./usr/share/bash-completion/completions/cpack +-rw-r--r-- root/root 4535 2022-11-30 08:57 ./usr/share/bash-completion/completions/ctest +drwxr-xr-x root/root 0 2022-11-30 14:57 ./usr/share/cmake/ +-rwxr-xr-x root/root 2410 2022-02-22 03:29 ./usr/share/cmake/debtoolchainfilegen +drwxr-xr-x root/root 0 2022-11-30 14:57 ./usr/share/doc/ +drwxr-xr-x root/root 0 2022-11-30 14:57 ./usr/share/doc/cmake/ +-rw-r--r-- root/root 2937 2022-11-30 14:57 ./usr/share/doc/cmake/changelog.Debian.gz +-rw-r--r-- root/root 29578 2022-05-25 14:57 ./usr/share/doc/cmake/copyright +drwxr-xr-x root/root 0 2022-11-30 14:57 ./usr/share/man/ +drwxr-xr-x root/root 0 2022-11-30 14:57 ./usr/share/man/man1/ +-rw-r--r-- root/root 15175 2022-11-30 14:57 ./usr/share/man/man1/cmake.1.gz +-rw-r--r-- root/root 2819 2022-11-30 14:57 ./usr/share/man/man1/cpack.1.gz +-rw-r--r-- root/root 18116 2022-11-30 14:57 ./usr/share/man/man1/ctest.1.gz +``` + +``` +# tree --metafirst -ugshap data/ +[drwxr-xr-x root root 4.0K] data/ +[drwxr-xr-x root root 4.0K] └── usr +[drwxr-xr-x root root 4.0K] ├── bin +[-rwxr-xr-x root root 8.8M] │   ├── cmake +[-rwxr-xr-x root root 9.1M] │   ├── cpack +[-rwxr-xr-x root root 10M] │   └── ctest +[drwxr-xr-x root root 4.0K] └── share +[drwxr-xr-x root root 4.0K] ├── bash-completion +[drwxr-xr-x root root 4.0K] │   └── completions +[-rw-r--r-- root root 6.7K] │   ├── cmake +[-rw-r--r-- root root 2.8K] │   ├── cpack +[-rw-r--r-- root root 4.4K] │   └── ctest +[drwxr-xr-x root root 4.0K] ├── cmake +[-rwxr-xr-x root root 2.4K] │   └── debtoolchainfilegen +[drwxr-xr-x root root 4.0K] ├── doc +[drwxr-xr-x root root 4.0K] │   └── cmake +[-rw-r--r-- root root 2.9K] │   ├── changelog.Debian.gz +[-rw-r--r-- root root 29K] │   └── copyright +[drwxr-xr-x root root 4.0K] └── man +[drwxr-xr-x root root 4.0K] └── man1 +[-rw-r--r-- root root 15K] ├── cmake.1.gz +[-rw-r--r-- root root 2.8K] ├── cpack.1.gz +[-rw-r--r-- root root 18K] └── ctest.1.gz +``` +Содержимое идентично. + +### 7. +Попробуйте вызвать исполняемый файл `usr/bin/cmake` из папки. Сопоставьте информацию в control файле пакета с выдачей команды `ldd usr/bin/cmake`. Если исполняемый файл не работает, найдите и установите зависимости в систему. Воспользуйтесь формой поиска на сайте https://www.debian.org/distrib/packages, если поиск по настроенным репозиториям не даёт результата. Добавьте репозиторий в котором есть нужная библиотека командой `apt edit-sources`. Обновите базу данных пакетов командой `apt update`. Завершите установку зависимостей и проверьте, что `cmake` работает. + +Для поиска списка зависимостей можно использовать одну из этих комманд: +``` +# ldd data/usr/bin/cmake +# dpkg --info cmake_3.25.1-1_amd64.deb +``` +``` +# apt-file search libcurl.so.4 +# apt install libcurl4 +# apt-file search libjsoncpp.so.25 +# apt install libjsoncpp25 +# apt-file search libarchive.so.13 +# apt install libarchive13 +# apt-file search librhash.so.0 +# apt install librhash0 +# ldd data/usr/bin/cmake +# data/usr/bin/cmake +``` + +### 8. +Утилитой `dpkg-query` выведите список пакетов, зарегистрированных в `dpkg` базе данных. Есть ли среди них зависимости `cmake`, которые вы установили вручную? +``` +# dpkg-query --list +``` +Если файлы были вручную разложены по системным папка из папки `data`, то пакет не попадёт в базу данных `dpkg`. Если выполнить +``` +# dpkg --install cmake_3.25.1-1_amd64.deb +``` +то файлы будут скопированы за вас и пакет зарегистрирован в базе данных `dpkg`. + +### 9. +Утилитой `dpkg-query` выведите среди установленных локально пакетов пакет, начинающихся с `libc6`. Утилитой `apt-cache` выполните тот же поиск по кэшу `apt`. Утилитой `apt` выполните тот же поиск по кэшу `apt`. Сравните, чем они отличаются. +``` +dpkg-query --list libc6* +``` +``` +apt-cache search ^libc6.* +``` +`apt-cache search` - выполняет полнотекстовый поиск по базе данных apt, полученной командой `apt update` из репозиториев, сконфигурированных в `/etc/apt/sources.list`. +`dpkg-query` - выполняет полнотекстовый поиск по базе данных `dpkg`, то есть по базе только установленных пакетов в систему. `apt` является фронтэндом для `dpkg`. + + +### 10. +Утилитой `dpkg-query` выведите статус пакета `sudo` и `gcc`. Чем выдача отличается от содержимого `control` файла `.deb`, скаченного ранее? + +Вывод отличается наличием информации о статусе +``` +# diff <(dpkg-query --status cmake | sort) <(cat control/control | sort) +19d18 +< Status: install ok unpacked +``` + +### 11. +Утилитой `dpkg-query` выведите список установленных файлов пакета `sudo` (не выводятся файлы созданные скриптами). +``` +# dpkg-query --listfiles sudo +``` + +### 12. +Утилитой `dpkg-query` выведите список файлов с метаданными пакета (control files), установленных в систему. +``` +# dpkg-query --control-list sudo +postrm +md5sums +preinst +shlibs +triggers +prerm +postinst +``` + +### 13. +Утилитой dpkg-query выведите содержимое одного из файлов с метаданными пакета (control files). +``` +# dpkg-query --control-show sudo preinst +#!/bin/sh + +set -e + +case "$1" in + install|upgrade) + if [ -n "$2" ] && dpkg --compare-versions "$2" le "1.7.4p4-4"; then + + SUDOERS="/etc/sudoers" + + if [ -e "$SUDOERS" ]; then + md5sum="$(md5sum $SUDOERS | sed -e 's/ .*//')" + if [ "$md5sum" = "c310ef4892a00cca8134f6e4fcd64b6d" ] || #lenny + [ "$md5sum" = "c5dab0f2771411ed7e67d6dab60a311f" ] || #squeeze + [ "$md5sum" = "45437b4e86fba2ab890ac81db2ec3606" ]; then #wheezy + # move unchanged sudoers file to avoid conffile question + mv "$SUDOERS" "$SUDOERS.pre-conffile" + fi + fi + fi + ;; +esac + +# Automatically added by dh_installinit/13.11.4 +if [ "$1" = "install" ] && [ -n "$2" ] && [ -e "/etc/init.d/sudo" ] ; then + chmod +x "/etc/init.d/sudo" >/dev/null || true +fi +# End automatically added section +``` + +### 14. +Утилитой `dpkg-query` выведите пути к файлам с метаданными пакета (control files). +``` +# dpkg-query --control-path sudo +/var/lib/dpkg/info/sudo.postrm +/var/lib/dpkg/info/sudo.md5sums +/var/lib/dpkg/info/sudo.preinst +/var/lib/dpkg/info/sudo.shlibs +/var/lib/dpkg/info/sudo.triggers +/var/lib/dpkg/info/sudo.prerm +/var/lib/dpkg/info/sudo.postinst +``` + +### 15. +Утилитой `dpkg-query` выполните поиск пакетов, которые установили в систему файл `pam.conf`. +``` +# dpkg-query --search */pam.conf +sudo: /usr/share/doc/sudo/examples/pam.conf +libpam-runtime: /etc/pam.conf +``` + +### 16. +Утилитой `dpkg` установите `cmake` `.deb` пакет, скачанный ранее. Ещё раз посмотрите на зависимости пакета. Как отреагировал `dpkg` на отсутствие зависимости `cmake-data` - установил или выдал ошибку? + +Пакет установился, но не сконфигурировался. + +### 17. +Скачайте `cmake-data` и его транзитивные зависимости https://packages.debian.org/sid/amd64/cmake. Завершите установку `cmake`, и проверьте, что команда `cmake` установлена в систему (например, командами `which`, `find`) и работает `cmake --version`. + +``` +# dpkg --list cmake cmake-data +Desired=Unknown/Install/Remove/Purge/Hold +| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend +|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) +||/ Name Version Architecture Description ++++-==============-============-============-======================================================= +iU cmake 3.25.1-1 amd64 cross-platform, open-source make system +ii cmake-data 3.25.1-1 all CMake data files (modules, templates and documentation) + +# cmake --version +cmake version 3.25.1 + +CMake suite maintained and supported by Kitware (kitware.com/cmake). + +# which cmake +/usr/bin/cmake +``` + +### 18. +Проверьте файлы всех установленных пакетов в системе на наличие изменений/повреждений командой `dpkg`. Какие файлы не прошли проверку (`??5??????`)? +``` +# dpkg --verify +??5?????? c /etc/sudoers +``` +В данном случае файл не прошёл проверку потому, что был изменён в редакторе для обеспечения беспарольного доступа группе `sudo`. + +#### 18.1 Справка + +В настоящее время поддерживается только формат вывода rpm, который состоит из строки для каждого пути, который не прошел ни одну проверку. Эти строки имеют следующий формат: +``` +missing [c] pathname [(error-message)] +??5?????? [c] имя пути +``` + +Первые 9 символов используются для сообщения о результате проверки. `?` Подразумевает, что проверка не может быть выполнена (отсутствие поддержки, права доступа к файлу и т.д.). `.` Подразумевает, что проверка пройдена. `A-Za-z0-9` Означает, что определенная проверка не прошла. В случае если запись была типа `missing`, и файл фактически отсутствовал в файловой системе, то после строки ставится пробел и сообщение об ошибке, заключенное в круглые скобки. + +Формат вывода rpm: +``` +SM5DLUGT c +``` + +- S размер файла (эти проверки в настоящее время не поддерживаются, всегда будет '?'), +- M режим файла (проверка режима файла не удалась (начиная с версии dpkg 1.21.0)), +- 5 MD5 хэш файла (проверка хэшкода не удалась, что означает, что содержимое файла изменилось), +- D мажорная и минорная версии файла (эти проверки в настоящее время не поддерживаются, всегда будет '?'), +- L содержимое символических ссылок файла (эти проверки в настоящее время не поддерживаются, всегда будет '?'), +- U владелец файла (эти проверки в настоящее время не поддерживаются, всегда будет '?'), +- G группа-владелец файла (эти проверки в настоящее время не поддерживаются, всегда будет '?'), +- T время модификации файла (эти проверки в настоящее время не поддерживаются, всегда будет '?'), +- c появляется только, если это конфигурационный файл (как правило именно они меняются и с большей вероятностью не пройдут проверку) +- полный путь к файлу, который не прошёл проверку. + +Знак вопроса означает, что файл не может быть проверен по какой-то причине. + +Дополнительные комментарии из `man dpkg` для секции `--verify-format` для проверки режима файла (M). Поскольку метаданные имени пути в настоящее время не отслеживаются, эта проверка может быть частично эмулирована только с помощью очень простой эвристики для имен путей, которые имеют известный хэшкод, что подразумевает, что они должны быть обычными файлами. Проверка будет неудачной, если путь указывает не на обычный файл в файловой системе. На текущий момент эта проверка никогда не будет успешной, так как нет достаточной информации. + + +### 19. +Сохраните список выбранных действий (selections) для пакетов в системе утилитой `dpkg` в файл. +``` +# dpkg --get-selections > /tmp/$(date -I)_selections +``` + +### 20. +Измените в сохранённом списке действие для пакета `vim` c текущего на deinstall (`man dpkg`, “Package selection states”). Перечитайте изменённый список командой `dpkg --set-selections`. +``` +# cat /tmp/2023-10-13_selections | dpkg --set-selections +# dpkg --get-selections | grep vim +vim deinstall +vim-common install +vim-runtime install +vim-tiny install +``` + +### 21. +Запустите команду `apt-get dselect-upgrade`. Не подтверждайте изменения. Какие пакеты будут установлены или удалены? +``` +# apt-get dselect-upgrade +Reading package lists... Done +Building dependency tree... Done +Reading state information... Done +The following packages will be REMOVED: + vim +The following NEW packages will be installed: + linux-image-6.1.0-13-amd64 +The following packages will be upgraded: + base-files dbus dbus-bin dbus-daemon dbus-session-bus-common dbus-system-bus-common dbus-user-session + debian-archive-keyring debianutils grub-common grub-pc grub-pc-bin grub2-common inetutils-telnet krb5-locales + libc-bin libc-l10n libc6 libdbus-1-3 libgssapi-krb5-2 libk5crypto3 libkrb5-3 libkrb5support0 libnftables1 + libnss-systemd libpam-modules libpam-modules-bin libpam-runtime libpam-systemd libpam0g libssl3 + libsystemd-shared libsystemd0 libudev1 libx11-6 libx11-data linux-image-6.1.0-10-amd64 linux-image-amd64 + locales nftables openssh-client openssh-server openssh-sftp-server openssl qemu-guest-agent ssh systemd + systemd-sysv systemd-timesyncd udev +50 upgraded, 1 newly installed, 1 to remove and 0 not upgraded. +1 not fully installed or removed. +Need to get 166 MB of archives. +After this operation, 404 MB of additional disk space will be used. +Do you want to continue? [Y/n] n +``` + +### 22. +Настройте в `/etc/sudoers` конфигурационном файле для пользователя `stud` возможность выполнять команды от лица суперпользователя без запроса пароля: +``` +%sudo ALL=(ALL:ALL) NOPASSWD: ALL +``` +Удалите, а затем установите пакет `sudo` командой `apt remove`. Проверьте содержимое конфигурационного файла на изменения. Проделайте то же самое, но c командой `apt purge`. + +`apt purge` - удалит все конфигурационные файлы, даже если они были изменены администратором. + +### 23. +Удалите `cmake` и `cmake-data` с помощью `apt`. Найдите в репозиториях, какая версия `cmake` доступна. Создайте файл в директории `/etc/apt/apt.conf.d/default-release` со следующим содержимым (`man apt.conf`): +``` +APT::Default-Release "stable"; +``` +Повторите поиск. Установите `stable` версию. Проверьте работоспособность команды и её версию `cmake --version`. Вы можете узнать значения текущих конфигурационных переменных `apt` командой `apt-config dump`. + +``` +# apt-config dump | grep Default-Release +APT::Default-Release "stable"; + +# apt search ^cmake$ +Sorting... Done +Full Text Search... Done +cmake/stable,now 3.25.1-1 amd64 [installed] + cross-platform, open-source make system +``` + +### 24. +Заморозьте версию `cmake` командой `apt-mark` или с помощью `dpkg --get-selections`, `dpkg --set-selections`. Поменяйте умолчания `/etc/apt/apt.conf.d/default-release` на "unstable". Проведите обновление пакетов в системе. `cmake` должен сохранить `stable` версию. + +После добавления в `sources.list` строк +``` +deb http://deb.debian.org/debian/ unstable main non-free-firmware +deb-src http://deb.debian.org/debian/ unstable main non-free-firmware +``` +и запуска `apt update`: + +``` +# apt-config dump | grep Default-Release +APT::Default-Release "unstable"; + +root@stud12:~# apt search ^cmake$ +Sorting... Done +Full Text Search... Done +cmake/unstable 3.27.7-1 amd64 [upgradable from: 3.25.1-1] + cross-platform, open-source make system +``` +доступна более свежая версия `cmake`. + +При попытке обновления пакеты отмеченные `hold` не будут обновлены: +``` +# apt-mark hold cmake cmake-data +cmake set on hold. +cmake-data set on hold. + +# apt upgrade +Reading package lists... Done +Building dependency tree... Done +Reading state information... Done +Calculating upgrade... Done +The following packages were automatically installed and are no longer required: + libcbor0.8 libfstrm0 libfuse2 libjemalloc2 liblmdb0 libmaxminddb0 libprotobuf-c1 +Use 'apt autoremove' to remove them. +The following NEW packages will be installed: + firmware-ath9k-htc gcc-13-base libcbor0.10 libfuse3-3 libsframe1 libunistring5 linux-image-6.5.0-2-amd64 + systemd-dev +The following packages have been kept back: + cmake cmake-data +``` + +### 25. +Удалите `cmake` для следующего упражнения в установке из исходного кода. Выполните `apt autoremove` для удаления ставших ненужными пакетов. +``` +# apt remove cmake cmake-data +Reading package lists... Done +Building dependency tree... Done +Reading state information... Done +The following package was automatically installed and is no longer required: + libuv1 +Use 'apt autoremove' to remove it. +The following packages will be REMOVED: + cmake cmake-data +The following held packages will be changed: + cmake cmake-data +0 upgraded, 0 newly installed, 2 to remove and 227 not upgraded. +After this operation, 40.3 MB disk space will be freed. +Do you want to continue? [Y/n] +(Reading database ... 41403 files and directories currently installed.) +Removing cmake (3.25.1-1) ... +Removing cmake-data (3.25.1-1) ... +Processing triggers for man-db (2.11.2-2) ... +root@stud12:~# apt autoremove +Reading package lists... Done +Building dependency tree... Done +Reading state information... Done +The following packages will be REMOVED: + libuv1 +0 upgraded, 0 newly installed, 1 to remove and 227 not upgraded. +After this operation, 305 kB disk space will be freed. +Do you want to continue? [Y/n] +(Reading database ... 38166 files and directories currently installed.) +Removing libuv1:amd64 (1.44.2-1) ... +Processing triggers for libc-bin (2.36-9+deb12u1) ... +# cmake +-bash: /usr/bin/cmake: No such file or directory +``` + +### 26. +Установите `git`, если он ещё не установлен. Перейдите в `/tmp` и вызовите: +``` +git clone --depth=1 https://github.com/Kitware/CMake +``` +Ваша цель установить пакет в директорию `/opt`. + +Прочитайте README.md секцию "Building CMake from Scratch". Установите компилятор g++, make. Для поддержки openssl - libssl-dev заголовочные файлы. В качестве --prefix используйте `/opt/cmake/`. Выполните 3 этапа: конфигурация компиляции, компиляция проекта, и установка. Для использования многопоточной компиляции используйте флаг `-j` при вызове `make`. + +``` +# apt install build-essential -y + +# gcc --version +gcc (Debian 13.2.0-5) 13.2.0 +Copyright (C) 2023 Free Software Foundation, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# ./configure +CMake Error at Utilities/cmcurl/CMakeLists.txt:640 (message): + Could not find OpenSSL. Install an OpenSSL development package or + configure CMake with -DCMAKE_USE_OPENSSL=OFF to build without OpenSSL. +# apt install libssl-dev +# ./configure --parallel=4 +CMake has bootstrapped. Now run gmake. + +# gmake -j +# gmake install + +# cmake --version +cmake version 3.28.20231013-gee5f31b + +CMake suite maintained and supported by Kitware (kitware.com/cmake). +``` + +### 27. +Используйте команду `dpkg-reconfigure`, чтобы перенастроить пакеты, связанные с локализацией `console-setup` и раскладкой клавиатуры `keyboard-configuration`. \ No newline at end of file diff --git a/module1/08_debian_package_management/tasks.md b/module1/08_debian_package_management/tasks.md index 42853c3..57fd472 100644 --- a/module1/08_debian_package_management/tasks.md +++ b/module1/08_debian_package_management/tasks.md @@ -33,52 +33,70 @@ deb-src http://security.debian.org/debian-security/ bookworm/updates main Определите с помощью команды `apt search`, какие варианты пакета содержащего команду `ar` доступны. Установите подходящий для вашей системы. ### 4. -Скачайте http://ftp.ru.debian.org/debian/pool/main/c/cmake/cmake_3.25.1-1_amd64.deb в отдельную папку. Перейдите в папку с пакетом и распакуйте `.deb` командой `ar -x путь-к-пакету`. В папке должны появиться: control.tar.xz data.tar.xz debian-binary. +Скачайте http://ftp.ru.debian.org/debian/pool/main/c/cmake/cmake_3.25.1-1_amd64.deb в отдельную папку. Перейдите в папку с пакетом и распакуйте `.deb` командой `ar -x путь-к-пакету`. В папке должны появиться: `control.tar.xz`, `data.tar.xz`, `debian-binary`. ### 5. -Создайте папку `control` и распакуйте в неё `control.tar.xz` с помощью команды `tar xfC путь-к-архиву control`. Изучите содержимое. Сравните с выдачей `dpkg --info ` для .deb файла. +Создайте папку `control` и распакуйте в неё `control.tar.xz` с помощью команды `tar xfC путь-к-архиву control`. Изучите содержимое. Сравните с выдачей `dpkg --info ` для `.deb` файла. ### 6. -Создайте папку `data` и распакуйте в неё `data.tar.xz` с помощью команды `tar xfC путь-к-архиву data`. Изучите data с помощью команды `tree`. Сравните с выдачей `dpkg --contents ` для `.deb` файла. +Создайте папку `data` и распакуйте в неё `data.tar.xz` с помощью команды `tar xfC путь-к-архиву data`. Изучите `data` с помощью команды `tree`. Сравните с выдачей `dpkg --contents ` для `.deb` файла. ### 7. -Попробуйте вызвать исполняемый файл `usr/bin/cmake` из папки. Сопоставьте информацию в control файле пакета с выдачей команды `ldd usr/bin/cmake`. Если исполняемый файл не работает, найдите и установите зависимости в систему. Воспользуйтесь формой поиска на сайте https://www.debian.org/distrib/packages, если поиск по настроенным репозиториям не даёт результата. Добавьте репозиторий в котором есть нужная библиотека командой `apt edit-sources`. Обновите базу данных пакетов командой `apt update`. Завершите установку зависимостей и проверьте, что cmake работает. +Попробуйте вызвать исполняемый файл `usr/bin/cmake` из папки. Сопоставьте информацию в control файле пакета с выдачей команды `ldd usr/bin/cmake`. Если исполняемый файл не работает, найдите и установите зависимости в систему. Воспользуйтесь формой поиска на сайте https://www.debian.org/distrib/packages, если поиск по настроенным репозиториям не даёт результата. Добавьте репозиторий в котором есть нужная библиотека командой `apt edit-sources`. Обновите базу данных пакетов командой `apt update`. Завершите установку зависимостей и проверьте, что `cmake` работает. ### 8. -Утилитой dpkg-query выведите список пакетов, зарегистрированных в dpkg базе данных. Есть ли среди них зависимости cmake, которые вы установили вручную? +Утилитой `dpkg-query` выведите список пакетов, зарегистрированных в `dpkg` базе данных. Есть ли среди них зависимости `cmake`, которые вы установили вручную? ### 9. -Утилитой dpkg-query выведите среди установленных локально пакетов пакет, начинающихся с ‘libc6’. Утилитой apt-cache выполните тот же поиск по кэшу apt. Утилитой apt выполните тот же поиск по кэшу apt. Сравните, чем они отличаются. +Утилитой `dpkg-query` выведите среди установленных локально пакетов пакет, начинающихся с `‘libc6’`. Утилитой `apt-cache` выполните тот же поиск по кэшу `apt`. Утилитой `apt` выполните тот же поиск по кэшу `apt`. Сравните, чем они отличаются. ### 10. -Утилитой dpkg-query выведите статус пакета sudo и gcc. Чем выдача отличается от содержимого control файла .deb, скаченного ранее? +Утилитой `dpkg-query` выведите статус пакета `sudo` и `gcc`. Чем выдача отличается от содержимого control файла `.deb`, скаченного ранее? ### 11. -Утилитой dpkg-query выведите список установленных файлов пакета sudo (не выводятся файлы созданные скриптами). +Утилитой `dpkg-query` выведите список установленных файлов пакета `sudo` (не выводятся файлы созданные скриптами). ### 12. -Утилитой dpkg-query выведите список файлов с метаданными пакета (control files), установленных в систему. +Утилитой `dpkg-query` выведите список файлов с метаданными пакета `sudo` (control files). ### 13. -Утилитой dpkg-query выведите содержимое одного из файлов с метаданными пакета (control files). +Утилитой `dpkg-query` выведите содержимое одного из файлов с метаданными пакета `sudo` (control files). ### 14. -Утилитой dpkg-query выведите пути к файлам с метаданными пакета (control files). +Утилитой `dpkg-query` выведите пути к файлам с метаданными пакета `sudo` (control files). ### 15. -Утилитой dpkg-query выполните поиск пакетов, которые установили в систему файл pam.conf. +Утилитой `dpkg-query` выполните поиск пакетов, которые установили в систему файл `pam.conf`. ### 16. -Утилитой dpkg установите cmake .deb пакет, скаченный ранее. Ещё раз посмотрите на зависимости пакета. Как отреагировал dpkg на отсутствие зависимости cmake-data - установил или выдал ошибку? +Утилитой `dpkg` установите `cmake .deb` пакет, скаченный ранее. Ещё раз посмотрите на зависимости пакета. Как отреагировал `dpkg` на отсутствие зависимости `cmake-data` - установил или выдал ошибку? ### 17. -Скачайте cmake-data и его транзитивные зависимости https://packages.debian.org/sid/amd64/cmake. Завершите установку cmake, и проверьте, что команда cmake установлена в систему (например, командами `which`, `find`) и работает `cmake --version`. +Скачайте `cmake-data` и его транзитивные зависимости https://packages.debian.org/sid/amd64/cmake. Завершите установку cmake, и проверьте, что команда cmake установлена в систему (например, командами `which`, `find`) и работает `cmake --version`. ### 18. -Проверьте файлы всех установленных пакетов в системе на наличие изменений/повреждений командой dpkg. Какие файлы не прошли проверку (`??5??????`)? +Проверьте файлы всех установленных пакетов в системе на наличие изменений/повреждений командой `dpkg`. Какие файлы не прошли проверку (`??5??????`)? + +Формат выдачи: +``` +SM5DLUGT c +``` +где +- S размер файла, +- M режим файла, +- 5 MD5 хэш файла, +- D мажорная и минорная версии файла, +- L содержимое символических ссылок файла, +- U владелец файла, +- G группа-владелец файла, +- T время модификации файла, +- c появляется только, если это конфигурационный файл. Как правило именно они меняются и с большей вероятностью не пройдут проверку. +- полный путь к файлу, который не прошёл проверку. + +Знак вопроса означает, что файл не может быть проверен по какой-то причине. Подробнее вы можете прочитать в мануале `man dpkg` в секции описывающей ключ `--verify-format`. ### 19. -Сохраните список выбранных действий и состояний (selections) для пакетов в системе утилитой dpkg в файл. +Сохраните список выбранных действий и состояний (selections) для пакетов в системе утилитой `dpkg` в файл. ### 20. Измените в сохранённом списке действие для пакета vim c текущего на deinstall (`man dpkg`, “Package selection states”). @@ -87,31 +105,31 @@ deb-src http://security.debian.org/debian-security/ bookworm/updates main Запустите команду `apt-get dselect-upgrade`. Какие пакеты будут установлены или удалены? ### 22. -Настройте в `/etc/sudoers` конфигурационном файле для пользователя stud возможность выполнять команды от лица суперпользователя без запроса пароля: +Настройте в `/etc/sudoers` конфигурационном файле для пользователя `stud` возможность выполнять команды от лица суперпользователя без запроса пароля: ``` %sudo ALL=(ALL:ALL) NOPASSWD: ALL ``` Удалите, а затем установите пакет sudo командой `apt remove`. Проверьте содержимое конфигурационного файла на изменения. Проделайте то же самое, но c командой `apt purge`. ### 23. -Удалите cmake и cmake-data с помощью apt. Найдите в репозиториях, какая версия cmake доступна. Создайте файл в директории `/etc/apt/apt.conf.d/default-release` с следующим содержимым (man apt.conf): +Удалите `cmake` и `cmake-data` с помощью `apt`. Найдите в репозиториях, какая версия cmake доступна. Создайте файл в директории `/etc/apt/apt.conf.d/default-release` с следующим содержимым (`man apt.conf`): ``` APT::Default-Release "stable"; ``` -Повторите поиск. Установите stable версию. Проверьте работоспособность команды и её версию `cmake --version`. Вы можете узнать значения текущих конфигурационных переменных `apt` командой `apt-conf dump`. +Повторите поиск. Установите `stable` версию. Проверьте работоспособность команды и её версию `cmake --version`. Вы можете узнать значения текущих конфигурационных переменных `apt` командой `apt-conf dump`. ### 24. -Заморозьте версию cmake командой `apt-mark` или с помощью `dpkg --get-selections`, `dpkg --set-selections`. Поменяйте умолчания `/etc/apt/apt.conf.d/default-release` на "unstable". Проведите обновление пакетов в системе. cmake не должен сохранить stable версию. +Заморозьте версию cmake командой `apt-mark` или с помощью `dpkg --get-selections`, `dpkg --set-selections`. Поменяйте умолчания `/etc/apt/apt.conf.d/default-release` на `"unstable"`. Проведите обновление пакетов в системе. cmake не должен сохранить stable версию. ### 25. Удалите cmake для следующего упражнения в установке из исходного кода. Выполните `apt autoremove` для удаления ставших ненужными пакетов. ### 26. -Установите git, если он ещё не установлен. Перейдите в /tmp и вызовите: +Установите `git`, если он ещё не установлен. Перейдите в `/tmp` и вызовите: ``` git clone --depth=1 https://github.com/Kitware/CMake ``` -Ваша цель установить пакет в директорию /opt. +Ваша цель установить пакет в директорию `/opt`. Прочитайте README.md секцию "Building CMake from Scratch". Установите компилятор g++, make. Для поддержки openssl - libssl-dev заголовочные файлы. В качестве --prefix используйте `/opt/cmake/`. Выполните 3 этапа: конфигурация компиляции, компиляция проекта, и установка. Для использования многопоточной компиляции используйте флаг `-j` при вызове `make`. @@ -137,4 +155,4 @@ git clone --depth=1 https://github.com/Kitware/CMake - sources.list - apt.conf - dpkg.conf - - apt_preferences + - apt_preferences \ No newline at end of file