Come elencare i file del pacchetto Deb prima dell’installazione
La domanda tipica prima di installare un nuovo pacchetto deb sul nostro sistema è quali sono i file effettivamente installati e dove si trovano i nuovi file. La situazione critica si verifica quando viene sostituito un file indesiderato che non avevi mai intenzione di sostituire. Quindi oggi in questo tutorial mi concentrerò sui passaggi che un amministratore di sistema può eseguire per eseguire la scansione dei file prima di installare il pacchetto e assicurarsi di essere al sicuro. Useremo Ubuntu 18.04 per questo articolo e dovrebbe funzionare per tutte le altre distribuzioni Linux che supportano i pacchetti deb.
Per elencare il contenuto di un pacchetto disinstallato, avremo bisogno di un pacchetto .deb. permettere scarica un pacchetto Ubuntu per i nostri test.
Prendiamo come esempio il pacchetto “curl”.
Per scaricare curl:
$ sudo wget http://archive.ubuntu.com/ubuntu/pool/main/c/curl/curl_7.58.0-2ubuntu3_amd64.deb
$ ls
curl_7.58.0-2ubuntu3_amd64.deb DEBIAN Desktop Documenti Download examples.desktop Musica Immagini Modelli pubblici Video
Imballaggio dpkg
Possiamo recuperare informazioni su un pacchetto con “dpkg -I”… Ma non ci dirà il contenuto. dpkg è un gestore di pacchetti per sistemi basati su Debian.
Per vedere i contenuti, usa l’opzione “–contents” o “-c” del comando dpkg.
$ dpkg -c curl_7.58.0-2ubuntu3_amd64.deb
## O ##
dpkg-deb -c curl_7.58.0-2ubuntu3_amd64.deb
drwxr-xr-x root/root 0 2018-03-15 17:50 ./
drwxr-xr-x root/root 0 2018-03-15 17:50 ./usr/
drwxr-xr-x root/root 0 2018-03-15 17:50 ./usr/bin/
-rwxr-xr-x root/root 223304 2018-03-15 17:50 ./usr/bin/curl
drwxr-xr-x root/root 0 2018-03-15 17:50 ./usr/share/
drwxr-xr-x root/root 0 2018-03-15 17:50 ./usr/share/doc/
drwxr-xr-x root/root 0 2018-03-15 17:50 ./usr/share/doc/curl/
-rw-r--r-- root/root 10955 2018-01-25 01:57 ./usr/share/doc/curl/copyright
drwxr-xr-x root/root 0 2018-03-15 17:50 ./usr/share/man/
drwxr-xr-x root/root 0 2018-03-15 17:50 ./usr/share/man/man1/
-rw-r--r-- root/root 38989 2018-03-15 17:50 ./usr/share/man/man1/curl.1.gz
drwxr-xr-x root/root 0 2018-03-15 17:50 ./usr/share/zsh/
drwxr-xr-x root/root 0 2018-03-15 17:50 ./usr/share/zsh/vendor-completions/
-rw-r--r-- root/root 12851 2018-03-15 17:50 ./usr/share/zsh/vendor-completions/_curl
lrwxrwxrwx root/root 0 2018-03-15 17:50 ./usr/share/doc/curl/NEWS.Debian.gz -> ../libcurl4/NEWS.Debian.gz
lrwxrwxrwx root/root 0 2018-03-15 17:50 ./usr/share/doc/curl/changelog.Debian.gz -> ../libcurl4/changelog.Debian.gz
Sopra possiamo vedere i dettagli sul contenuto del pacchetto dato. Gli svantaggi sono che devi aver scaricato il rispettato pacchetto .deb.
Per trovare da quale pacchetto proviene un particolare file .deb:
$ sudo dpkg -S curl
libcurl3:amd64: /usr/share/doc/libcurl3/NEWS.Debian.gz
libcurl3-gnutls:amd64: /usr/share/doc/libcurl3-gnutls/changelog.Debian.gz
bash-completion: /usr/share/bash-completion/completions/curl
libpython2.7-stdlib:amd64: /usr/lib/python2.7/macurl2path.py
libcurl3:amd64: /usr/share/doc/libcurl3
python3-pycurl: /usr/share/doc/python3-pycurl
libcurl3:amd64: /usr/lib/x86_64-linux-gnu/libcurl.so.4.4.0
libcurl3-gnutls:amd64: /usr/share/doc/libcurl3-gnutls/copyright
libcurl3-gnutls:amd64: /usr/share/doc/libcurl3-gnutls/NEWS.Debian.gz
gnupg: /usr/lib/gnupg/gpgkeys_curl
python3-pycurl: /usr/lib/python3/dist-packages/curl
libcurl3:amd64: /usr/share/lintian/overrides/libcurl3
python3-pycurl: /usr/share/doc/python3-pycurl/copyright
libcurl3:amd64: /usr/share/doc/libcurl3/changelog.Debian.gz
libpython3.5-stdlib:amd64: /usr/lib/python3.5/macurl2path.py
python3-pycurl: /usr/share/doc/python3-pycurl/changelog.Debian.gz
libcurl3:amd64: /usr/share/doc/libcurl3/copyright
libcurl3:amd64: /usr/lib/x86_64-linux-gnu/libcurl.so.4
libcurl3:amd64: /usr/lib/x86_64-linux-gnu/libcurl.so.3
python3-pycurl: /usr/lib/python3/dist-packages/curl/__init__.py
python3-pycurl: /usr/lib/python3/dist-packages/pycurl.cpython-35m-x86_64-linux-gnu.so
libcurl3-gnutls:amd64: /usr/share/lintian/overrides/libcurl3-gnutls
libcurl3-gnutls:amd64: /usr/share/doc/libcurl3-gnutls
python3-pycurl: /usr/lib/python3/dist-packages/pycurl-7.43.0.egg-info
libcurl3-gnutls:amd64: /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4
libcurl3-gnutls:amd64: /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.3
libcurl3-gnutls:amd64: /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4.4.0
....
Con l’opzione -L chiediamo a dpkg di elencare il contenuto di un pacchetto installato fornendogli il nome del pacchetto.
Per elencare i file installati da un pacchetto:
$ sudo dpkg -L curl
/.
/usr
/usr/bin
/usr/bin/curl
/usr/share
/usr/share/doc
/usr/share/doc/curl
/usr/share/doc/curl/copyright
/usr/share/zsh
/usr/share/zsh/vendor-completions
/usr/share/zsh/vendor-completions/_curl
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/curl.1.gz
/usr/share/doc/curl/changelog.Debian.gz
/usr/share/doc/curl/NEWS.Debian.gz
...
Elencare i file usando apt-file
“apt-file” un pacchetto software che elenca il contenuto dei pacchetti nei propri archivi e consente di cercare un file specifico tra tutti i pacchetti disponibili.
Per installare il file apt:
$ sudo apt install apt-file
$ sudo apt-file update
Ora elenca il contenuto di qualsiasi pacchetto:
$ sudo apt-file list
Esempio 1:
$ sudo apt-file list curl
curl: /usr/bin/curl
curl: /usr/share/doc/curl/NEWS.Debian.gz
curl: /usr/share/doc/curl/changelog.Debian.gz
curl: /usr/share/doc/curl/copyright
curl: /usr/share/man/man1/curl.1.gz
curl: /usr/share/zsh/vendor-completions/_curl
Esempio 2:
$ sudo apt-file list ssh
ssh: /usr/share/doc/ssh/NEWS.Debian.gz
ssh: /usr/share/doc/ssh/changelog.Debian.gz
ssh: /usr/share/doc/ssh/copyright
ssh: /usr/share/lintian/overrides/ssh
Di seguito è riportato il modo migliore per navigare direttamente nel repository dei pacchetti.
http://packages.debian.org/[distro_name]/tutto/[package_name]/filelist
Esempio:
http://packages.debian.org/wheezy/all/transmission-common/filelist
Per estrarre i file che some_package.deb in una directory:
$ sudo mkdir some_dir
$ sudo dpkg -x some_package.deb some_dir
Esempio:
Per il pacchetto “ricciolo”.
$ sudo mkdir curl_extracts
$ sudo dpkg -x curl_7.58.0-2ubuntu3_amd64.deb curl_extracts
$ tree curl_extracts
curl_extracts/
└── usr
├── bin
│ └── curl
└── share
├── doc
│ └── curl
│ ├── changelog.Debian.gz -> ../libcurl4/changelog.Debian.gz
│ ├── copyright
│ └── NEWS.Debian.gz -> ../libcurl4/NEWS.Debian.gz
├── man
│ └── man1
│ └── curl.1.gz
└── zsh
└── vendor-completions
└── _curl
9 directories, 6 files
Per estrarre i dati di controllo (script del pacchetto, metadati, ecc.) che some_package.deb in una directory:
$ sudo mkdir some_dir
$ sudo dpkg -e some_package.deb some_dir
Esempio:
Per il pacchetto “ricciolo”.
$ sudo mkdir curl_control_data
$ sudo dpkg -x curl_7.58.0-2ubuntu3_amd64.deb curl_control_data
$ tree curl_control_data
curl_control_data/
├── control
└── md5sums
0 directories, 2 files
l’ordine sarebbe vx
Il programma GNU creerebbe, modificherebbe ed estrarrebbe dagli archivi. Un singolo file che contiene una raccolta di altri file in una struttura che rende possibile recuperare i singoli file originali (chiamati membri dell’archivio) è chiamato Archivio.
Controllo del contenuto estraendo direttamente il file .deb.
$ sudo ar vx curl_7.58.0-2ubuntu3_amd64.deb
Questo comando estrarrà il file .deb e genererà i seguenti 3 output.
x - debian-binary
x - control.tar.xz
x - data.tar.xz
GNU/tar o BSD/tar è un programma di archiviazione progettato per archiviare ed estrarre file da un file di archivio noto come file tar. È possibile creare un file tar o un file tar compresso (.tar). Tuttavia, a volte è necessario elencare il contenuto del file tar o tar.gz sullo schermo prima di estrarre tutti i file.
Estraiamo il terzo file, ovvero data.tar.xz per vedere il contenuto del file .deb.
Dove,
t: Elenca il contenuto di un archivio.
v: Elenca i file elaborati in modo esteso (mostra informazioni dettagliate).
z: Filtrare l’archivio tramite gzip in modo da poter aprire il file tar .gz compresso (non compresso).
J: Filtra l’archivio per bzip2, usa per decomprimere i file .bz2.
f nomefile: utilizza il file di archivio denominato nomefile.
$ tar -xvJf data.tar.xz
./
./usr/
./usr/bin/
./usr/bin/curl
./usr/share/
./usr/share/doc/
./usr/share/doc/curl/
./usr/share/doc/curl/copyright
./usr/share/man/
./usr/share/man/man1/
./usr/share/man/man1/curl.1.gz
./usr/share/zsh/
./usr/share/zsh/vendor-completions/
./usr/share/zsh/vendor-completions/_curl
./usr/share/doc/curl/NEWS.Debian.gz
./usr/share/doc/curl/changelog.Debian.gz
Anche sopra dove puoi cercare i passaggi nel pacchetto, spero che troverai utile questo tutorial. Commenta altri metodi che conosci e continua a leggere il prossimo tutorial.