33 KiB
Решения
Действия ниже производятся от пользователя 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 появляется только, если это конфигурационный файл (как правило именно они меняются и с большей вероятностью не пройдут проверку)
- полный путь к файлу, который не прошёл проверку.
Знак вопроса означает, что файл не может быть проверен по какой-то причине.
Дополнительные комментарии из 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
.