====== apt & dpkg - сборник полезностей ======
==== apt pin для php из sury ====
В Debian 11 уже идёт PHP 7.4, но я предпочитаю репозиторий sury.
Задача: установить 7.4 из репозитория sury\\
Проблема: конфликт пакетов + установка производится из репозитория debian\\
Решение: повысить приоритет репозитория sury
Добавляем в ''/etc/apt/preferences.d/deb.sury.pref''
Package: *
Pin: origin "packages.sury.org"
Pin-Priority: 900
либо только для пакетов php7.4-*
Package: *php7.4*
Pin: origin "packages.sury.org"
Pin-Priority: 900
Вариант ниже надо проверить
Package: *
Pin: release o=deb.sury.org
Pin-Priority: 900
Подсказка по priority
[[https://interface31.ru/tech_it/2016/03/ispolzuem-apt-pinning-dlya-zakrepleniya-paketov-v-debian-ubuntu.html|RU]]
* P >= 1000 - пакет будет установлен, даже если это приведет к понижению версии уже установленного пакета
* 990 <= P < 1000 - пакет будет установлен, если не установлена более новая версия
* 500 <= P < 990 - пакет будет установлен, если нет пакета принадлежащего к целевому выпуску или не установлена более новая версия
* 100 <= P < 500 - пакет будет установлен, если нет кандидатов из других источников или установленного пакета более новой версии
* 0 < P < 100 - пакет будет установлен, если нет других кандидатов и установленных пакетов любой версии
* P < 0 - пакет не будет установлен ни при каких условиях
* P = 0 - неопределенное состояние, не используется
EN
Package: *
Pin: origin my.custom.repo.url
Pin-Priority: P
Package: *
Pin: origin packages.sury.org
Pin-Priority: 999
* P > 1000 causes a version to be installed even if this constitutes a downgrade of the package
* 990 < P <=1000 causes a version to be installed even if it does not come from the target release, unless the installed version is more recent
* 500 < P <=990 causes a version to be installed unless there is a version available belonging to the target release or the installed version is more recent
* 100 < P <=500 causes a version to be installed unless there is a version available belonging to some other distribution or the installed version is more recent
* 0 < P <=100 causes a version to be installed only if there is no installed version of the package
* P < 0 prevents the version from being installed
==== Посмотреть версию установленного пакета ====
apt-show-versions nginx
dpkg -s nginx | grep -i version
apt-cache policy nginx
Устаревшая команда
apt-cache madison curl
==== Исключить пакет из обновлений ====
**apt-mark**
#apt-mark hold nginx
nginx set on hold.
# apt upgrade
The following packages have been kept back:
nginx
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
Вернуть обратно
# apt-mark unhold nginx
Canceled hold on nginx.
**dpkg**
# echo "nginx hold" | dpkg --set-selections
Вернуть обратно
# echo "nginx install" | dpkg --set-selections
**aptitude**
# aptitude hold nginx
# aptitude unhold nginx
==== configure: error: Please reinstall the gpgme distribution ====
apt-get install libgpgme11-dev
==== sudo: phpize: command not found ====
apt install php7.0-dev
==== rulesfile not readable: /etc/network/iptables.up.rules ====
**iptables-persistent** заменили на **netfilter-persistent**
iptables-persistent
# service iptables-persistent
Usage: /etc/init.d/iptables-persistent {start|restart|reload|force-reload|save|flush}
netfilter-persistent
# service netfilter-persistent
Usage: /etc/init.d/netfilter-persistent {start|restart|reload|force-reload|save|flush}
==== sqlcmd ====
$ curl https://packages.microsoft.com/config/debian/10/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list
$ sudo apt update
$ sudo apt install mssql-tools
$ /opt/mssql-tools/bin/sqlcmd
[[https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools|Обновить PATH]], чтобы не было ''sqlcmd command not found''
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
===== Ошибки =====
==== TLS not available: requires Net::SSLeay. Exiting ====
apt-get install libnet-ssleay-perl
apt-get install libcrypt-ssleay-perl
==== Unable to open env file: /etc/default/locale ====
Ошибка **pam_env(cron:session): Unable to open env file: /etc/default/locale: No such file or directory**
apt-get install locales
locale-gen en_US.UTF-8
dpkg-reconfigure locales
update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
echo "export LC_ALL=en_US.UTF-8" >> ~/.bashrc
echo "export LANG=en_US.UTF-8" >> ~/.bashrc
echo "export LANGUAGE=en_US.UTF-8" >> ~/.bashrc
Проверить FIXME
==== Разное ====
Ошибка **The value 'stretch-backports' is invalid for APT::Default-Release as such a release is not available in the sources**
Нужно [[https://backports.debian.org/Instructions/|установить backports]]
Ошибка **UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd0 in position 3701: invalid continuation byte**
Файл сохранен в windows редакторе. Пересохранить в UTF-8 кодировке.
Ошибка **UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 103: ordinal not in range(128)**
export LC_CTYPE=en_US.UTF-8
source ~/.bashrc
[[https://stackoverflow.com/a/49127686|via]]
export LC_CTYPE="en_EN.UTF-8"
[[https://stackoverflow.com/a/52546101|via]]
locale-gen "en_US.UTF-8"
dpkg-reconfigure locales
[[https://stackoverflow.com/a/38307773|via]]
==== ipv4 и ipv6 для apt ====
Принудительно использовать v4 или v6 соединение.
Добавить в файл ''/etc/apt/apt.conf.d/99-force-ipv4''
Acquire::ForceIPv4 "true";
или
Acquire::ForceIPv6 "true";
==== Запретить обновление определенных пакетов ====
Запретить обновление пакета mariadb-server
echo "mariadb-server hold" | dpkg --set-selections
Проверка
# dpkg --get-selections | grep mariadb-server
mariadb-server hold
Если выполнить **apt-get upgrade**
The following packages have been kept back:
mariadb-server mariadb-server-10.2
Разрешить обновление пакета
echo "mariadb-server install" | dpkg --set-selections
Проверка
# dpkg --get-selections | grep mariadb-server
mariadb-server install
==== sury php failed ====
❌Ошибка
W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: https://packages.sury.org jessie InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B188E2B695BD4743
W: Failed to fetch https://packages.sury.org/php/dists/jessie/InRelease
W: Some index files failed to download. They have been ignored, or old ones used instead.
✅Решение
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
==== Как обновить только один пакет ====
# apt-get install --only-upgrade openssl
==== There is no public key available ====
# apt-get update
# apt-get install debian-archive-keyring debian-keyrin
==== Посмотреть с какими опциями был сконфигурирован PHP ====
# apt-get install php5-dev
# php-config --configure-options
==== APT shell & apt-spy. Особая Debian магия ====
/usr/bin/ld: cannot find -lssl
/usr/bin/ld: cannot find -lcrypto
collect2: error: ld returned 1 exit status
# apt-get install libssl-dev libcrypto++-dev
==== Как вывести список всех установленных пакетов в Debian ====
$ dpkg --get-selections
adduser install
alsa-base install
alsa-utils install
apache2 install
apache2-mpm-prefork install
apache2-utils install
apache2.2-common install
apt install
apt-utils install
$ dpkg --get-selections | grep php
libapache2-mod-php5 install
php-db install
php-pear install
php-sqlite3 install
php5 install
php5-cli install
php5-common install
php5-gd install
php5-memcache install
php5-mysql install
php5-sqlite install
php5-sqlite3 install
php5-xsl install
==== mailx и s-nail ====
Ошибка - **mailx: invalid option -- 'S'**.\\
Решение - заменить mailx на s-nail ¯\_(ツ)_/¯
История утилиты mail из 70-х годов - [[http://heirloom.sourceforge.net/mailx_history.html|mail, Mail, mailx, nail—history notes]]