Управление на пакети
5. Обновяване към следваща версия
6. Изчистване на стари версии на ядрото
За системи преди дистрибуция 16.04+
7. Автоматично обновяване на пакети
8. Конфигуриране на хранилищата
Съвременните Linux базирани операционни системи управляват инсталирането, актуализирането и премахването на софтуер, чрез предварително компилирани пакети (packages), които са архиви включващи всички необходими бинарни файлове, конфигурационни файлове и метаданни за осигуряване на дадена функционалност.
Системата за управление на пакети в Ubuntu е базирана на системата използвана от Debian GNU/Linux дистрибуциите. Пакетните файлове на Debian са с разширение .deb.
Пакетите се съхраняват се в хранилища (repositories) – колекции от пакети върху различни медии – дискове или онлайн. Инсталацията им е бърза и не изисква компилиране на софтуера. Хранилищата са различни в зависимост от лиценза на софтуера. Хранилищата са достъпни чрез голямо количество "mirrors" (огледални сървъри), които са разположени на географски принцип. Ubuntu машината се абонира за най-близкия (с който има най-бърза връзка) mirror. Осъвременяването на пакетиите в тези сървъри се извършва много често, понякога по няколко пъти на ден, особено ако се касае до открити проблеми в сигурността.
Съгласно документацията на Ubuntu:
The four main repositories are:
Main - Canonical-supported free and open-source software.
Universe - Community-maintained free and open-source software.
Restricted - Proprietary drivers for devices.
Multiverse - Software restricted by copyright or legal issues.
Инсталационният файл (.iso) включва пакетите от хранилищата Main и Restricted , което позволява инсталирането на операционната система и без интернет връзка. Веднага след инсталцията е необходимо обновяване на пакетите от съответния mirror.
Освен пакетите хранилишата включват и друга информация - индекси, контролни суми, информация за версията, и се съхраняват в дървовидна структура. Хранилищата съхраняват различни версии (releases). Всеки release има пакети за различни архитектури (amd64, i386, mips, powerpc, s390x, ...) както и sources и архитектурно независими пакети. Пакетите са разделени в отделни комплекти (suites)- stable, oldstable, testing, unstable. Повече за формата на хранилищата може да видите тук.
Сложните пакети изискват инсталирани други пакети за да работят – пакетна зависимост(dependencies), която се осигурява автоматично от системата за управление при инсталирането на пакетите. Честото обновяване на пакетите изисква преди всяка инсталация на нов пакет да се извършва обновяване на инсталирираните пакети за осигуряване на коректна пакетна зависимост.
Debian използва съвкупност от софтуерни инструменти за управление на пакети наречени Advanced Packaging Tool (APT) . Има различни команди, които взаимодейстават с APT и позволяват инсталирането, премахването и управлението на пакетите. Едни от най-поулярните са dpkg, apt-get, apt-cache (вместо последните две от версия 16.04 се предлага по модерната версия apt).
Недостатък на .deb пакетите, че те са свързвани с библиотеките от съответния release, в следствие на което при разработката на нов пакет, ползващ нова библиотека, той обикновено не може да бъде предоставен на потребителите до излизането на съответния release, а разработчика трябва да компилира пакета поотделно за всеки release.
Универсалните пакети (Universal packages) са нова концепция за Linux, като идеята е пакета да включва в себе си всички необходими библиотеки и да може да бъде използван независимо от текущата дистрибуция. По настоящем има три конкуращи се технологии за това - Flatpak, AppImage и Snap пакети.
Командата dpkg (Debian package manager) е средство за управление на пакетите в Debian базирани системи. За разлика от други средства не може да се използва за автоматично сваляне и инсталиране на зависимости на нови пакети. В този раздел са описани някои от възможностите му за управление на вече инсталирани пакети.
· За показване на всички инсталирани пакети:
$ dpkg -l
Тъй като списъкът е много голям, изходът от командата обикновено се насочва към команда за филтриране за да се провери дали конкретен пакет е инсталиран – например пакета base-files:
$ dpkg -l | egrep base-files
Може да се използва името на пакета, част от него или регулярен израз.
$ dpkg -l | egrep base-f
· За показване файловете инсталирани от даден пакет – например пакета base-files:
$dpkg -L base-files
$ dpkg -L base-files |egrep hos
/etc/host.conf
· За показване кой пакет е инсталирал даден файл – например файла /etc/host.conf:
$ dpkg -S /etc/host.conf
·
Резюме на възможните опции:
Синтаксис | Описание | Примери |
dpkg -i {.deb package} | Install the package | dpkg -i zip_2.31-3_i386.deb |
dpkg -i {.deb package} | Upgrade package if it is installed else install a fresh copy of package | dpkg -i zip_2.31-3_i386.deb |
dpkg -R {Directory-name} | Install all packages recursively from directory | dpkg -R /tmp/downloads |
dpkg -r {package} | Remove/Delete an installed package except configuration files | dpkg -r zip |
dpkg -P {package} | Remove/Delete everything including configuration files | dpkg -P apache-perl |
dpkg -l | List all installed packages, along with package version and short description | dpkg -l dokg -l | less dpkg -l '*apache*' dpkg -l | grep -i 'sudo' |
dpkg -l {package} | List individual installed packages, along with package version and short description | dpkg -l apache-perl |
dpkg -L {package} | Find out files are provided by the installed package i.e. list where files were installed | dpkg -L apache-perl dpkg -L perl |
dpkg -c {.Deb package} | List files provided (or owned) by the package i.e. List all files inside debian .deb package file, very useful to find where files would be installed | dpkg -c dc_1.06-19_i386.deb |
dpkg -S {/path/to/file} | Find what package owns the file i.e. find out what package does file belong | dpkg -S /bin/netstat dpkg -S /sbin/ippool |
dpkg -p {package} | Display details about package package group, version, maintainer, Architecture, display depends packages, description etc | dpkg -p lsof |
dpkg -s {package} | grep Status | Find out if Debian package is installed or not (status) | dpkg -s lsof | grep Status |
За повече информация –
man dpkg
Командата apt е мощно командно средство в Ubuntu, което инсталира, обновява (upgrade) и премахва пакети, актуализира (update) индексите на хранилищата, и дори обновява цялата операционна система. Има редица предимства – може да се използва върху проста терминална връзка и може да се включва в скриптове, които могат да се стартират автоматично (например с cron scheduling utility).
Командата може да се използва вместо по-старите команди apt-get и apt-cache и предоставя по-опростен и интуитивен интерфейс за най-често използваните в тях опции.
Инсталиране на пакет
$sudo apt install <PackName>
Деинсталиране на пакет
$sudo apt remove <PackName>
С премахване на конфигурационните файлове
$sudo apt purge <PackName>
Ако са повече от един се разделят с интервал
$sudo apt install <PackName1> <PackName2>
$sudo apt purge<PackName1> <PackName2>
За премахване на остарелите пакети
$sudo apt autoremove
Командата премахва пакетите, които са били автоматично инсталирани за осигуряване на зависимостта, но повече не са необходими.
Актуализиране на локалния индекс на пакетите с промените в хранилищата
$sudo apt update
Обновяване на пакетите. С времето обновени версии на пакетите, някои от които са свързани със сигурността се появяват в хранилищата. За да бъдат обновени инсталираните пакети след актуализация на локалния индекс:
$sudo apt upgrade
Обновяването на пакетите включва и обновяване на ядрото на операционната система. Може изрично да се поиска проверка и ибновяване на ядрото с:
$sudo apt full-upgrade
Версията на Ubuntu се проверява с
$lsb_release -a
А версията на ядрото – с:
$ uname -r
Ако възникне проблем с някоя нова версия на ядрото може да се поиска връщане към по-стара версия (downgrade). Как става това подробно може да се види тук.
Списъкът с хранилищата и техните адреси може да бъде променян с
$sudo apt edit-sources
който осигурява редактиране на файла с хранилищата. При първо пускане трябва да бъде избран editor, който ще се използва (може след това да бъде промененен с командата 'sudo select-editor')
Команди apt-get и apt-cache, които се заместват с apt
Следните команди са без аналог в apt-get и apt-cache:
Допълнителна информация за командата може да се намери с
$apt help
Забележка:
При актуализиране на ядрото понякога се налага ръчно актуализиране на някои драйвери. Често това се случва с графична карта nvidia, което води до проблеми с графичния интерфейс. В този случай се проверява модела на nvidia graphic card и се инсталира препоръчвания драйвер:
$ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd00001C03sv00001043sd000085ABbc03sc00i00
vendor : NVIDIA Corporation
model : GP106 [GeForce GTX 1060 6GB]
driver : nvidia-driver-390 - distro non-free
driver : nvidia-driver-435 - distro non-free
driver : nvidia-driver-440 - distro non-free recommended
driver : xserver-xorg-video-nouveau - distro free builtin
След което се инсталира препоръчания драйвер (в случая nvidia-driver-440 ) чрез:
$ sudo ubuntu-drivers autoinstall
или чрез:
$sudo apt install nvidia-driver-440
Необходимо е рестартиране:
$sudo reboot
Проверка кой е инсталираният драйвер може да се извърши с:
$ nvidia-smi
Ако има проблеми при инсталирането на фирмените драйвери на nvidia, те може да се деинсталират, след което да се опита с новия драйвер
$ sudo apt purge nvidia-XXX
$sudo apt install xserver-xorg-video-nouveau
След което е необходимо рестартиране на системата
Snap (известен също катоSnappy) е софтуерно средство за инсталиране и управление на пакети създадено от Canonical (компанията зад Ubuntu). Пакетите се наричат "snaps", а услугата, която работи с тях "snapd". Тя работи с почти всички "Linux" дистрибуции.
Snapd представлява REST API демон за управление на snap пакети. Потребителите могат да го ползват чрез snap клиент, който е част от същия пакет. Позволява пакетирането на всяка апликация от всеки Linux станция, сървър, облак или устройство. В този смисъл snap изпълнява дейност подобна на apt , но по друг начин.
Инсталиране
В дистрибуцията Ubuntu 16.04+ Snapd е инсталиран и готов за употреба. За други дистрибуции:
$ sudo apt update
$ sudo apt install snapd
Търсене на на налични snaps пакети по част от името
$ snap find <search_text>
Инсталиране на пакет
$ sudo snap install <package>
Списък на инсталираните snaps пакети
$ snap list
Обновяване на инсталираните snaps пакети. Тези пакети се обновяват автоматично от демона, но могат да бъдат обновени и ръчно
$ sudo snap refresh <package>
Списък на пакетите с готови версии за обновяване
$ sudo snap refresh --list
Връщане към предишна версия на обновен пакет:
$ sudo snap revert <package>
Дезинсталиране на инсталиран snaps пакет:
$ sudo snap remove
<package>
Временно дезактивиране и активиране на инсталирани snaps пакети
$ sudo snap disable <package>
<package> disabled
$ sudo snap enable <package>
<package> enabled
Допълнителна информация може да се намери с
$ man snap
Има различни начини за обновяване на версията на Ubuntu . Препоръчваният от Ubuntu начин е да се използва do-release-upgrade utility, който е част от update-manager-core пакет, инсталиран по подразбиране.
$do-release-upgrade
Ако текущата версия на Ubuntu е LTS, то като следваща версия за обновяване по подразбиране е също LTS. Така например 16.04 може да се обнови по този начин само след появяването на 18.04.01.
Ако се търси обновяване по-рано трябва да се подаде команда за обновяване към версия в развитие (development):
$do-release-upgrade -d
Обновяване към версия в развитие не се препоръчва за реално работеща система.
Забележка: Базираните на Debian системи могат също така да бъдат обновявани с apt dist-upgrade. Тази команда обаче не осигурява промяната в конфигурационните файлове която понякога се налага между версиите.
В терминален прозорец се проверява текущото ядро – не го премахвайте:
$uname -r
Проверяват се всички инсталирани ядра в системата:
$dpkg -l | egrep linux-image
Могат да се премахват ядра с по-ниски номера. Оставете поне едно резервно ядро за всеки случай..
$sudo apt purge linux-image-x.x.x-x-generic
Командата премахва не само ядрата, но и свързаните с тях конфигурационни файлове съхраняващи се в съответни пакети linux-headers-*.
$sudo apt autoremove
Командата за премахване на остарелите пакети включва и старите ядра – всички версии на linux-headers-* и linux-image-* (За всеки случай се оставя една резервна версия на ядрото).
Внимание! При преминаване на по-висока "major" версия (например от 16.04 към 18.04) командата не премахва останалите от предходната версия ядра и те трябва да се премахнат по отделно за всяко ядро по по-горе описания начин!
Забележка! Ядрата са маркирани дали са инсталирани автоматично ( могат да се премахват с apt autoremove) или ръчно (могат да се премахват само поотделно, например с горната процедура). Кои ядра са инсталирани автоматично може да се провери с :
$apt-mark showauto 'linux-image-.*'
А кои са инсталирани ръчно - с:
$apt-mark showmanual 'linux-image-.*'
Допълнителна информация може да се намери тук.
Пакетът unattended-upgrades се използва за автоматично сваляне и инсталиране на обновените пакети и може да бъде конфигуриран да инсталира всички нови версии на пакетите или само на пакетите свързани със сигурността на системата.
Инсталиране на пакета:
$sudo apt install unattended-upgrades
За конфигуриране на unattended-upgrades трябва да се редактира файла /etc/apt/apt.conf.d/50unattended-upgrades :
Unattended-Upgrade::Allowed-Origins {
"Ubuntu xenial-security";
// "Ubuntu xenial-updates";
};
Някои пакети могат да бъдат забранени за обновяване, чрез добавянето им в Package-Blacklist:
Unattended-Upgrade::Package-Blacklist {
// "vim";
// "libc6";
// "libc6-dev";
// "libc6-i686";
};
За да се позволи автоматичното обновяване трябва да се редактира файла /etc/apt/apt.conf.d/10periodic и да се зададе периода на обновяване:
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";
В горния пример актуализирането на индекса на пакетите от хранилищата, свалянето и обновяването на пакетите се извършва всеки ден. Почистване от ненужните вече пакети се извършва един път седмично. Задаването на 0 дни не разрешава извършването на съответното действие.
Конфигурирането на системните хранилища се съхранява във файла /etc/apt/sources.list и в директорията /etc/apt/sources.list.d . Това позволява поддръжката на неограничен брой активни хранилища и разнообразие от съхраняващи ги медии.
Файлът /etc/apt/sources.list съдържа по една линия за всяко хранилище, като първи се подреждат предпочитаните (за случаите когато една и съща версия на пакет се съдържа в няколко хранилища). Обикновено най бързо-достъпните се нареждат в началото.
Всяка линия започва с тип (например deb-src) последвана от опции и аргументи. Линиите не могат да се продължават на следващ ред. Празните линии са игнорирани а символът # прави остатъка от линията коментар. Всяка линия може да бъде отменена с този символ.
deb http://bg.archive.ubuntu.com/ubuntu/ xenial main restricted
deb-src http://bg.archive.ubuntu.com/ubuntu/ xenial main restricted
deb http://bg.archive.ubuntu.com/ubuntu/ xenial-updates main restricted
deb-src http://bg.archive.ubuntu.com/ubuntu/ xenial-updates main restricted
В допълнение на официално поддържаните пакети от Ubuntu, съществуват допълнителни хранилища поддържани от доброволни общности с хиляди пакети . Kак се създава ново хранилище може да видите тук.
Две от най-известните хранилища са Universe и Multiverse. Тези хранилища не са официално поддържани от Ubuntu, но понеже са поддържани от общност те обикновено са сигурни и могат да бъдат инсталирани. Хранилището Multiverse често включва пакети чиито лицензи не позволяват разпространяването им с безплатни ОС и могат да са нелегални в някои страни. Тъй като не са официално поддържани от Ubuntu е възможно някои от тях да не получават обновявания свързани със сигурността.
Има и други хранилища, много от които предлагат един единствен пакет. Трябва много внимателно да се подхожда при добавяне на нови хранилища като се проверява за коя версия на операционната система са предназначени и да се търсят отзиви. Включването на неподходящи хранилища може да доведе до нестабилност в работата. За начина на добавяне на нови хранилища може да прочетете тук.
По подразбиране хранилищата са включени със следните линии в /etc/apt/sources.list ( могат да бъдат изключени чрез обръщане в коментар).
deb http://archive.ubuntu.com/ubuntu xenial universe multiverse
deb-src http://archive.ubuntu.com/ubuntu xenial universe multiverse
deb http://us.archive.ubuntu.com/ubuntu/ xenial universe
deb-src http://us.archive.ubuntu.com/ubuntu/ xenial universe
deb http://us.archive.ubuntu.com/ubuntu/ xenial-updates universe
deb-src http://us.archive.ubuntu.com/ubuntu/ xenial-updates universe
deb http://us.archive.ubuntu.com/ubuntu/ xenial multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ xenial multiverse
deb http://us.archive.ubuntu.com/ubuntu/ xenial-updates multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ xenial-updates multiverse
deb http://security.ubuntu.com/ubuntu xenial-security universe
deb-src http://security.ubuntu.com/ubuntu xenial-security universe
deb http://security.ubuntu.com/ubuntu xenial-security multiverse
deb-src http://security.ubuntu.com/ubuntu xenial-security multiverse
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install wget
$ wget
https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
$ sudo dpkg -i google-chrome-stable_current_amd64.deb
$ google-chrome
$sudo apt update
$sudo apt install openssh-server
sudo systemctl status ssh
Ако ufw е активиран е необходимо да се разреши достъпа отвън:sudo ufw allow ssh
ip a
$sudo apt update
$sudo apt upgrade
$sudo apt autoremove
$sudo apt install default-jdk