====== 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]]