|
|
|
@ -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`.
|