Перейти к основному содержимому

Задание 1: Распаковка дистрибутива

В этом разделе мы изучим процесс работы с дистрибутивом, поставляемым в виде zip-архива. Мы освоим проверку содержимого архива, распаковку основных пакетов и работу с дополнительным программным обеспечением, входящим в его состав.

Проверка содержимого zip-архива​

Получите подробную информацию о содержимом zip-файла с дистрибутивом:

[student@srv1 ~]$ zipinfo PSQ-6.7.0-redos8.0-distrib.zip
Archive: PSQ-6.7.0-redos8.0-distrib.zip
Zip file size: 718277738 bytes, number of entries: 9
-rw-r--r-- 3.0 unx 31855796 bx stor 26-Mar-20 19:21 documentation-distrib.zip
-rw-r--r-- 3.0 unx 28150149 bx stor 26-Mar-20 19:21 installer-distrib.zip
-rw-r--r-- 3.0 unx 210215846 bx stor 26-Mar-20 19:21 owned-distrib.zip
-rw-r--r-- 3.0 unx 447298251 bx stor 26-Mar-20 19:21 party-distrib.zip
-rw-r--r-- 3.0 unx 745726 bx stor 26-Mar-20 19:21 untrusted-distrib.zip
-rwxr-xr-x 3.0 unx 2061 tx defN 26-Mar-20 19:09 unpacker-distrib.sh
-rw-r--r-- 3.0 unx 8938 tx defN 26-Mar-20 19:22 regid.2021-12.ru.sbertech_psq-6.7.0.swidtag
-rw-r--r-- 3.0 unx 107320 tx defN 26-Mar-20 19:22 cyclonedx-distrib.json
-rw-r--r-- 3.0 unx 33 tx defN 26-Mar-20 19:22 requirements.txt
9 files, 718384120 bytes uncompressed, 718276162 bytes compressed: 0.0%

Такую же информацию можно получить и утилитой unzip. Самостоятельно изучите, как это сделать.

Как это сделать?

Для получения технической информации о файлах внутри zip-архива с помощью утилиты unzip в командной строке Linux используется опция -Z:

[student@srv1 ~]$ unzip -Z PSQ-6.7.0-redos8.0-distrib.zip

Получите информацию только о тех файлах zip-архива с дистрибутивом, которые сами представляют собой zip-файлы. Информация должна включать в себя оценку степени сжатия файла в архиве:

[student@srv1 ~]$ zipinfo -m PSQ-6.7.0-redos8.0-distrib.zip '*.zip'
-rw-r--r-- 3.0 unx 31855796 bx 0% stor 26-Mar-20 19:21 documentation-distrib.zip
-rw-r--r-- 3.0 unx 28150149 bx 0% stor 26-Mar-20 19:21 installer-distrib.zip
-rw-r--r-- 3.0 unx 210215846 bx 0% stor 26-Mar-20 19:21 owned-distrib.zip
-rw-r--r-- 3.0 unx 447298251 bx 0% stor 26-Mar-20 19:21 party-distrib.zip
-rw-r--r-- 3.0 unx 745726 bx 0% stor 26-Mar-20 19:21 untrusted-distrib.zip

Распаковка основных пакетов​

Распаковка уже была выполнена в задании второго уровня этой темы. Здесь необходимо обеспечить возможность запуска установочного скрипта без явного вызова оболочки.

Проверим содержимое первой строки установочного скрипта:

[student@srv1 Distr]$ head -1 unpacker-distrib.sh
#!/bin/bash

Эта строка сообщает, что файл скрипта может быть запущен без явного указания оболочки, поскольку неявно указана оболочка /bin/bash.

Работа с дополнительным ПО в zip-архиве​

В zip-архиве с дистрибутивом поставляется программное обеспечение, которое устанавливается при необходимости вручную.

Решим следующие задачи:

  1. Найти в zip-архиве rpm-пакет copywala.
  2. Получить информацию об этом пакете.

Проверим, установлен ли такой пакет:

[student@srv1 ~]$ rpm -qa '*copywala*'

Не установлен.

Найдем пакет в дистрибутиве:

[student@srv1 ~]$ find Distr/ -maxdepth 2 -type f -name '*copywala*.rpm'
Distr/distributive/pangolin-copywala-1.2.2-redos8.0.x86_64.rpm

Получим информацию о пакете:

[student@srv1 ~]$ rpm -qip Distr/distributive/pangolin-copywala-1.2.2-redos8.0.x86_64.rpm
Name : pangolin-copywala
Version : 1.2.2
Release : redos8.0
Architecture: x86_64
Install Date: (not installed)
Group : Other
Size : 42629536
License : "Sbertech license"
Signature : (none)
Source RPM : copywala-1.2.2-redos8.0.src.rpm
Build Date : Вт 24 фев 2026 19:17:34
Build Host : d63381ef5123
Summary : "Commit hash: 4882b486f171ab8075a87c0f502c05430914d714
Description :
Provides creation of backups and recovery of data from backups.

Пакет не установлен в системе, поэтому кроме опций -qi, позволяющих получить информацию о пакете, необходима еще и опция -p. Самостоятельно получите информацию об этом.

Что означает опция -p?

Опция -p (package) в команде rpm указывает менеджеру пакетов, что источником информации является файл пакета, а не запись в системной базе данных уже установленных программ.

Перед установкой пакета бывает разумно выяснить список его зависимостей:

[student@srv1 ~]$ rpm -qRp Distr/distributive/pangolin-copywala-1.2.2-redos8.0.x86_64.rpm
Вывод команды:

/bin/sh
/bin/sh
/bin/sh
config(pangolin-copywala) = 1.2.2-redos8.0
libc.so.6()(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.17)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.2)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.32)(64bit)
libc.so.6(GLIBC_2.33)(64bit)
libc.so.6(GLIBC_2.34)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libcrypto.so.3()(64bit)
libcrypto.so.3(OPENSSL_3.0.0)(64bit)
libfe_elog.so()(64bit)
libgcc_s.so.1()(64bit)
libgcc_s.so.1(GCC_3.0)(64bit)
libjsoncpp.so.25()(64bit)
libpassword_encryption.so.1()(64bit)
libresolv.so.2()(64bit)
libssl.so.3()(64bit)
libssl.so.3(OPENSSL_3.0.0)(64bit)
libstdc++.so.6()(64bit)
libstdc++.so.6(CXXABI_1.3)(64bit)
libstdc++.so.6(GLIBCXX_3.4)(64bit)
libstdc++.so.6(GLIBCXX_3.4.11)(64bit)
libstdc++.so.6(GLIBCXX_3.4.14)(64bit)
libstdc++.so.6(GLIBCXX_3.4.15)(64bit)
libstdc++.so.6(GLIBCXX_3.4.17)(64bit)
libstdc++.so.6(GLIBCXX_3.4.18)(64bit)
libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
libstdc++.so.6(GLIBCXX_3.4.21)(64bit)
libstdc++.so.6(GLIBCXX_3.4.29)(64bit)
libstdc++.so.6(GLIBCXX_3.4.32)(64bit)
libstdc++.so.6(GLIBCXX_3.4.9)(64bit)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(PayloadIsZstd) <= 5.4.18-1
rtld(GNU_HASH)

Какие-то из этих зависимостей могут потребовать установку дополнительного ПО.

Проще всего проверить это можно, протестировав установку пакета, не выполняя его реальную установку.

Например, так:

[student@srv1 ~]$ rpm -ivh --test Distr/distributive/pangolin-copywala-1.2.2-redos8.0.x86_64.rpm
Verifying... ################################# [100%]
Preparing... ################################# [100%]

Проблемы не обнаружены. Неудовлетворенных зависимостей не выявлено.

Подведем итоги​

Вопрос 1

Вопрос 1: Какие команды подходят для получения подробной информации о содержимого zip-архива без извлечения файлов из него?

Вопрос 2

Вопрос 2: Какая опция необходима для запроса к RPM для получения информации о пакете, который еще не установлен?