Paketinhallinta

Linux-jakeluissa on useita erilaisia pakettienhallintatyökaluja, joista apt ja yum ovat varmasti yleisimmät Debian ja Red Hat -pohjaisten järjestelmin suosion myötä. apt:n ja yumin lisäksi on tekstipohjaisia ja graafisia työkaluja, sekä alemman tason pakettienhallintaan dpkg ja rpm. Ylemmäntason työkalujen tehtävä on lähinnä pakettilähteiden hallinta ja järjestelmätason pakettihallinta. Alemmantason työkalut sopivat yksittäisten pakettien hallintaan. Pakettienhallinnan lisäksi lopussa käydään läpi muutamia komentoja ohjelmistojen ja kirjastojen riippuvuussuhteiden selvittämiseksi.

APT

Advanced Package Tool on muun muassa Debian-pohjaisten Linuxien pakettienhallintatyökalu.

# apt-get install autossh                  // Asentaa paketin
# apt-get install autossh=1.4d-1           // Asentaa tietyn version
# apt-get -y update                        // Päivittää paketit, y -optiolla asennus ei kysele varmistusta  
# apt-get -y upgrade                       // Päivittää paketit uudempaan versioon  
# apt-get install autossh --only-upgrade   // Päivittää paketin, mutta ei asenna uusia  
# apt-get install autossh --no-upgrade     // Estää olemassa olevien pakettien päivityksen  

# apt-get remove autossh                   // Poistaa paketin  
# apt-get purge autossh                    // Poistaa paketin ja sen konfiguraatio-tiedostot  
# apt-get download autossh                 // Lataa paketin nykyiseen hakemistoon  
# apt-get source autossh                   // Lataa paketin lähdekoodin ja purkaa sen hakemistoon  
# apt-get --download-only source autossh   // Lataa paketin lähdekoodin nykyiseen hakemistoon  
# apt-get changelog autossh                // Lataa paketin muutoslogin  

# apt-get check                            // Tarkastaa hajonneet riippuvuudet  
# apt-get clean                            // Poistaa paketit cachesta  
# apt-get autoclean                        // Poistaa paketit archivesta  
    

Toisin kuin remove, autoremove poistaa myös paketin riippuvuudet.

# apt-get remove tftpd
...
The following packages will be REMOVED:
  tftpd
...

# apt-get autoremove tftpd
...
The following packages will be REMOVED:
  libfile-copy-recursive-perl openbsd-inetd tftpd update-inetd
...

apt-cachea voidaan käyttää pakettien etsimiseen. search optiolla voidaan etsiä hakusanalla, show näyttää paketin tiedot, showpkg riippuvuudet ja pkgnames näyttää paketit jotka sisältävät hakusanan.

# apt-cache search autossh
autossh - Automatically restart SSH sessions and tunnels

# apt-cache show autossh
Package: autossh
Version: 1.4d-1
Installed-Size: 119
...

# apt-cache pkgnames tftp
tftpd-hpa
tftp
tftp-hpa-dbg
tftp-hpa
tftpd

# apt-cache showpkg tftp
...
Reverse Depends:
  tftp-hpa,tftp
  debian-edu-config,tftp
Dependencies:
0.17-18 - netbase (0 (null)) libc6 (2 2.3) netstd (0 (null))
...

dpkg

dpkg on alemmantason työkalu pakettien hallintaan. dpkg ei osaa hakea riippuvuuksia automaattisesti. Osa optioista vaatii paketin tiedostonimen.

# dpkg -i tftpd_0.17-18_amd64.deb          // Asentaa paketin  
dpkg: dependency problems prevent configuration of tftpd:
 tftpd depends on openbsd-inetd | inet-superserver; however:
  Package openbsd-inetd is not installed.
  Package inet-superserver is not installed.
  Package openbsd-inetd which provides inet-superserver is not installed.

# dpkg -r tftpd                            // Poistaa paketin  
# dpkg -p tftpd                            // Poistaa paketin ja konfiguraatio-tiedostot  

# dpkg -l tftpd                            // Listaa asennetut paketit tai optiolla tietyn paketin  
# dpkg -s tftpd                            // Näyttää onko paketti asennettu ja paketin tiedot  
# dpkg -L tftpd                            // Listaa asennetun paketin tiedostot  
# dpkg -c tftpd_0.17-18_amd64.deb          // Listaa paketin sisällön  
...
drwxr-xr-x root/root         0 2010-09-24 19:52 ./usr/sbin/
-rwxr-xr-x root/root     15784 2010-09-24 19:52 ./usr/sbin/in.tftpd
drwxr-xr-x root/root         0 2010-09-24 19:52 ./usr/share/
drwxr-xr-x root/root         0 2010-09-24 19:52 ./usr/share/man/
...

# dpkg -R --install hakemisto/             // Asentaa kaikki deb-paketit tietystä hakemistosta
# dpkg --unpack tftpd_0.17-18_amd64.deb    // Purkaa paketin sisällön, mutta ei asenna  
# dpkg --configure tftpd                   // Konfiguroi puretun paketin

YUM

Yellowdog Updater Modified on Red Hat-pohjaisten Linuxien pakettienhallintatyökalu.

# yum install openssh                                  // Asentaa paketin
# yum install openssh --downloadonly                   // Lataa paketin
# yum install openssh --downloadonly --downloaddir=.   // Lataa paketin nykyiseen hakemistoon
# yum install openssh --skip-broken                    // Ohittaa hajonneet riippuvuudet
# yum reinstall openssh                                // Uudelleenasentaa paketin
# yum downgrade openssh                                // Plaa paketin aiempaan versioon
# yum check update                                     // Tarkastaa saatavilla olevat päivitykset  
# yum -y update                                        // Päivittää paketit, y -optiolla ei kysele varmistusta  
# yum update openssh                                   // Päivittää paketin ja asentaa riippuvuudet   

# yum remove openssh                                   // Poistaa paketin  
# yum list openssh                                     // Etsii tietyn paketin   
# yum list installed                                   // Listaa asennetut paketit
# yum search openssh                                   // Etsii paketi(t)n hakusanan perusteella  
# yum info openssh                                     // Näyttää tiedot paketista  

# yum provides /etc/ssh/sshd_config                    // Näyttää mille paketille tietty tiedosto kuuluu 
...
openssh-server-7.4p1-11.el7.x86_64 : An open source SSH server daemon
Repo        : base
Matched from:
Filename    : /etc/ssh/sshd_config
...
 
# yum grouplist                                        // Listaa ryhmäpaketit
...   
Available Environment Groups:
   Minimal Install
   Compute Node
   Infrastructure Server
... 

# yum groupinstall 'Compute Node'                      // Asentaa ryhmäpaketin 
# yum groupupdate 'Compute Node'                       // Päivittää ryhmäpaketin
# yum groupremove 'Compute Node'                       // Poistaa ryhmäpaketin

# yum repolist                                         // Listaa pakettilähteet  
# yum repolist all                                     // Listaa pakettilähteet käytössä olevat ja listatut 
# yum --enablerepo=centosplus install perf             // Asentaa paketin tietystä pakettilähteestä 

# yum history                                          // Listaa yumin historian  
Loaded plugins: fastestmirror
ID     | Login user         | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
    10 | root               | 2017-11-28 18:44 | Update         |    3
     9 | root               | 2017-11-22 10:28 | Install        |   23
...

yum-utils -paketti sisältää työkaluja yumin ja pakettilähteiden hallintaan.

# yum install -y yum-utils
# yum-config-manager --enable centosplus               // Aktivoi pakettilähteen
# yum-config-manager --disable centosplus              // Deaktivoi pakettilähteen
# yum-config-manager --add-repo=REPO                   // Lisää pakettilähteen tietystä osoitteesta tai tiedostosta

RPM

Red Hat Package Manager on alemman tason pakettienhallintatyökalu. v -optiolla saa yleensä enemmän irti komennosta.

# rpm -i tftp-5.2-13.el7.x86_64.rpm                    // Asentaa paketin
# rpm -ivh tftp-5.2-13.el7.x86_64.rpm                  // Asentaa paketin, tulostaa infon
Preparing...                          ################################# [100%]
Updating / installing...
   1:tftp-5.2-13.el7                  ################################# [100%] 

# rpm -U tftp-5.2-13.el7.x86_64.rpm                    // Päivittää paketin
# rpm -e tftp                                          // Poistaa paketin

# rpm -Va                                              // Tarkastaa mahdolliseseti puuttuvat paketit  
# rpm -qip tftp-5.2-13.el7.x86_64.rpm                  // Listaa paketin tiedot  
# rpm -qlpv tftp-5.2-13.el7.x86_64.rpm                 // Listaa paketin tiedostot
-rwxr-xr-x    1 root    root                    32632 Nov  5  2016 /usr/bin/tftp
drwxr-xr-x    2 root    root                        0 Nov  5  2016 /usr/share/doc/tftp-5.2
-rw-r--r--    1 root    root                    10445 Dec 12  2011 /usr/share/doc/tftp-5.2/CHANGES
-rw-r--r--    1 root    root                      903 Dec 12  2011 /usr/share/doc/tftp-5.2/README
-rw-r--r--    1 root    root                     2628 Nov  5  2016 /usr/share/doc/tftp-5.2/README.security
-rw-r--r--    1 root    root                     2686 Nov  5  2016 /usr/share/man/man1/tftp.1.gz

# rpm -ql tftp                                         // Listaa asennetun paketit tiedot  
# rpm -qil tftp                                        // Listaa paketin asentamat tiedostot  
/usr/bin/tftp
/usr/share/doc/tftp-5.2
/usr/share/doc/tftp-5.2/CHANGES
/usr/share/doc/tftp-5.2/README
/usr/share/doc/tftp-5.2/README.security
/usr/share/man/man1/tftp.1.gz

# rpm -qf /usr/bin/passwd                              // Kertoo mihin pakettiin tiedosto sisältyy
passwd-0.79-4.el7.x86_64
# rpm2cpio tftp-5.2-13.el7.x86_64.rpm | cpio -idmv     // Purkaa paketin sisällön nykyiseen hakemistoon  

Ohjelmien ja kirjastojen riippuvuuksien selvittäminen

Joskus vastaan voi tulla tilanne, että ympäristö vaatii kirjastojen ja ohjelman riippuvuuksien selvittämistä. ldd-komento kertoo tietyn ohjelman riippuvuudet. ldd voi joissakin tapauksissa kutsua itse ohjelmaa, mikä ei kolmannen osapuolen ohjelmistojen yhteydessä ole tietoturvan kannalta suotavaa. objdump on toinen vaihtoehto kaivettaessa tietoa tiedostoista.

# ldd /usr/bin/tftp
        linux-vdso.so.1 =>  (0x00007fffaa170000)
        libreadline.so.6 => /lib64/libreadline.so.6 (0x00007fe7facad000)
        libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007fe7faa83000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fe7fa6bf000)
        /lib64/ld-linux-x86-64.so.2 (0x000055f490611000)

# objdump -p /usr/bin/tftp |grep NEEDED
  NEEDED               libreadline.so.6
  NEEDED               libtinfo.so.5
  NEEDED               libc.so.6

Ajossa olevien prosessien riippuvuuksia voidaan tutkia pldd -komennolla antamalla kommennolle pid.

# pldd 2284
2284:   /usr/bin/tftp
linux-vdso.so.1
/lib64/libreadline.so.6
/lib64/libtinfo.so.5
/lib64/libc.so.6
/lib64/ld-linux-x86-64.so.2
/lib64/libnss_files.so.2