Solutions for 08

pull/1/head^2
vlpr 1 year ago
parent 54a11e21db
commit b6cb42cf24

@ -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 <pkg-cmake-team@lists.alioth.debian.org>
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 <pkg-cmake-team@lists.alioth.debian.org>
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 <file>
```
- S размер файла (эти проверки в настоящее время не поддерживаются, всегда будет '?'),
- M режим файла (проверка режима файла не удалась (начиная с версии dpkg 1.21.0)),
- 5 MD5 хэш файла (проверка хэшкода не удалась, что означает, что содержимое файла изменилось),
- D мажорная и минорная версии файла (эти проверки в настоящее время не поддерживаются, всегда будет '?'),
- L содержимое символических ссылок файла (эти проверки в настоящее время не поддерживаются, всегда будет '?'),
- U владелец файла (эти проверки в настоящее время не поддерживаются, всегда будет '?'),
- G группа-владелец файла (эти проверки в настоящее время не поддерживаются, всегда будет '?'),
- T время модификации файла (эти проверки в настоящее время не поддерживаются, всегда будет '?'),
- c появляется только, если это конфигурационный файл (как правило именно они меняются и с большей вероятностью не пройдут проверку)
- <file> полный путь к файлу, который не прошёл проверку.
Знак вопроса означает, что файл не может быть проверен по какой-то причине.
Дополнительные комментарии из `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`.

@ -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 <file>
```
где
- S размер файла,
- M режим файла,
- 5 MD5 хэш файла,
- D мажорная и минорная версии файла,
- L содержимое символических ссылок файла,
- U владелец файла,
- G группа-владелец файла,
- T время модификации файла,
- c появляется только, если это конфигурационный файл. Как правило именно они меняются и с большей вероятностью не пройдут проверку.
- <file> полный путь к файлу, который не прошёл проверку.
Знак вопроса означает, что файл не может быть проверен по какой-то причине. Подробнее вы можете прочитать в мануале `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
Loading…
Cancel
Save