Введение
В этой лабораторной работе вы изучите фундаментальный процесс сборки и установки программного обеспечения из исходного кода в системе Linux. Это критически важный навык для работы с приложениями, которые отсутствуют в менеджере пакетов вашего дистрибутива, или когда вам необходимо активировать специфические пользовательские функции. Вы будете работать с реальным примером — FTP-сервером Pure-FTPd, чтобы понять каждый этап рабочего процесса установки из исходного кода.
Вы начнете с извлечения исходного кода из сжатого архивного файла, обычно называемого «тарбол» (tarball), с помощью команды tar. Затем вы подготовите среду сборки, запустив скрипт ./configure, после чего скомпилируете исходный код в исполняемые программы с помощью команды make. После успешной компиляции вы установите программное обеспечение в систему с помощью make install. Наконец, вы узнаете, как правильно удалить программное обеспечение и очистить файлы исходного кода, завершив полный жизненный цикл установки из исходников.
Извлечение исходного кода с помощью tar
На этом этапе вы узнаете, как извлечь архив с исходным кодом, обычно называемый «тарболом», с помощью команды tar. Исходный код программного обеспечения часто распространяется в сжатых архивных файлах формата .tar.gz, чтобы объединить все необходимые файлы вместе и уменьшить общий размер файла.
Сначала давайте убедимся, что архив с исходным кодом доступен в нашей текущей рабочей директории ~/project. Используйте команду ls -l, чтобы вывести список файлов и их подробную информацию.
ls -l
В выводе вы должны увидеть файл pure-ftpd-1.0.53.tar.gz.
total 748
-rw-r--r-- 1 labex labex 765432 Nov 10 12:00 pure-ftpd-1.0.53.tar.gz
Теперь мы воспользуемся командой tar для извлечения содержимого этого архива. Мы будем использовать следующие опции:
-x: для extract (извлечения) файлов из архива.-z: для распаковки архива с помощью gzip, на что указывает расширение.gz.-v: для verbose (подробного) вывода, который отображает все файлы в процессе их извлечения.-f: для указания filename (имени файла) архива, который нужно обработать.
Выполните следующую команду в терминале, чтобы извлечь архив:
tar -zxvf pure-ftpd-1.0.53.tar.gz
Опция -v заставит tar выводить имя каждого извлекаемого файла. Вывод будет довольно длинным, но он должен выглядеть примерно так, как в примере ниже, показывая структуру директорий и создаваемые файлы.
pure-ftpd-1.0.53/
pure-ftpd-1.0.53/AUTHORS
pure-ftpd-1.0.53/README
pure-ftpd-1.0.53/README.LDAP
pure-ftpd-1.0.53/README.MySQL
pure-ftpd-1.0.53/README.PGSQL
...
pure-ftpd-1.0.53/src/puredb_p.h
pure-ftpd-1.0.53/src/pure-quotacheck.c
pure-ftpd-1.0.53/src/pure-uploadscript.c
После завершения команды будет создана новая директория, содержащая исходный код. Давайте снова воспользуемся ls -l, чтобы увидеть эту новую директорию.
ls -l
Теперь вы должны увидеть директорию pure-ftpd-1.0.53 рядом с исходным тарболом.
total 752
drwxr-xr-x 10 labex labex 4096 Nov 10 12:05 pure-ftpd-1.0.53
-rw-r--r-- 1 labex labex 765432 Nov 10 12:00 pure-ftpd-1.0.53.tar.gz
Вы успешно извлекли исходный код из архива. На следующем этапе мы перейдем в эту новую директорию и начнем процесс конфигурации и компиляции.
Конфигурация и компиляция программного обеспечения с помощью ./configure и make
На этом этапе вы настроите исходный код для вашей конкретной системы, а затем скомпилируете его в исполняемые программы. Это стандартный двухэтапный процесс сборки программного обеспечения из исходного кода в системах Linux.
Сначала вам нужно сменить текущую директорию на ту, которая была создана на предыдущем этапе. Используйте команду cd для перехода в директорию pure-ftpd-1.0.53.
cd ~/project/pure-ftpd-1.0.53
Теперь, когда вы находитесь внутри директории с исходным кодом, первая часть процесса — запуск скрипта configure. Этот скрипт проверяет вашу систему на наличие всех необходимых инструментов, библиотек и зависимостей, требуемых для сборки программного обеспечения. Затем он генерирует Makefile, который содержит инструкции для процесса компиляции.
Чтобы запустить скрипт, вы должны ввести ./ перед его именем. Это указывает оболочке искать скрипт configure в текущей директории.
./configure
Скрипт выполнит серию проверок, и вы увидите много прокручивающегося текста. Это нормально. Успешное выполнение завершится сводкой, похожей на приведенную ниже.
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
...
checking for OpenSSL... no
...
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating man/Makefile
...
config.status: executing depfiles commands
Pure-FTPd has been configured.
Обратите внимание на строки config.status: creating Makefile. Это подтверждает, что Makefile был успешно создан.
Вторая часть процесса — компиляция кода. Команда make считывает Makefile и запускает компилятор (например, gcc) с правильными опциями, чтобы превратить понятный человеку исходный код (файлы .c) в исполняемые двоичные файлы (бинарники).
Теперь выполните команду make.
make
Этот процесс может занять некоторое время. Вы увидите множество строк вывода, так как make вызывает компилятор для каждого файла исходного кода. Это и есть процесс компиляции.
(CDPATH="${ZSH_VERSION+.}:" && cd . && /bin/bash /home/labex/project/pure-ftpd-1.0.53/config/missing automake-1.15 --gnu src/Makefile)
...
gcc -g -O2 -Wall -W -Wshadow -Wcast-align -Wwrite-strings -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline -c pure-ftpd.c
...
gcc -g -O2 -Wall -W -Wshadow -Wcast-align -Wwrite-strings -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline -o pure-ftpd pure_ftpd-pure-ftpd.o pure_ftpd-log.o ...
...
make[1]: Leaving directory '/home/labex/project/pure-ftpd-1.0.53/src'
Как только команда make завершится без ошибок, программное обеспечение будет успешно скомпилировано. Двоичные файлы теперь готовы к установке в систему, что вы и сделаете на следующем этапе.
Установка программного обеспечения с помощью make install
На этом этапе вы установите скомпилированное программное обеспечение в вашу систему. После компиляции исходного кода с помощью make, полученные двоичные файлы и другие необходимые компоненты (такие как документация и файлы конфигурации) все еще находятся внутри директории с исходным кодом. Команда make install копирует эти файлы в стандартные системные директории, чтобы программное обеспечение можно было запускать из любого места.
Убедитесь, что вы все еще находитесь в директории ~/project/pure-ftpd-1.0.53.
Процесс установки обычно требует записи файлов в директории, такие как /usr/local/bin и /usr/local/sbin, владельцем которых является пользователь root. Поэтому вы должны использовать команду sudo для выполнения make install с правами администратора.
Выполните следующую команду для установки Pure-FTPd:
sudo make install
Команда make install прочитает Makefile и выполнит инструкции по установке. Вы увидите вывод, показывающий, как файлы создаются и копируются в системные директории.
make[1]: Entering directory '/home/labex/project/pure-ftpd-1.0.53/src'
/usr/bin/mkdir -p '/usr/local/sbin'
/usr/bin/install -c pure-ftpd pure-pw pure-pwconvert pure-authd pure-certd pure-uploadscript pure-quotacheck '/usr/local/sbin'
/usr/bin/mkdir -p '/usr/local/share/man/man8'
/usr/bin/install -c -m 644 ../man/pure-ftpd.8 ../man/pure-pw.8 ../man/pure-pwconvert.8 ../man/pure-authd.8 ../man/pure-certd.8 '/usr/local/share/man/man8'
make[1]: Leaving directory '/home/labex/project/pure-ftpd-1.0.53/src'
make[1]: Entering directory '/home/labex/project/pure-ftpd-1.0.53'
/usr/bin/mkdir -p '/usr/local/etc'
/usr/bin/install -c -m 644 pure-ftpd.conf '/usr/local/etc'
make[1]: Nothing to be done for 'install-data-am'.
make[1]: Leaving directory '/home/labex/project/pure-ftpd-1.0.53'
Программное обеспечение установлено. Простой способ проверить это — использовать команду which, которая ищет исполняемый файл в системной переменной PATH и выводит его полный путь.
which pure-ftpd
Если установка прошла успешно, вы должны увидеть следующий вывод, указывающий на то, что исполняемый файл pure-ftpd теперь находится в стандартной системной директории.
/usr/local/sbin/pure-ftpd
Теперь, когда программное обеспечение установлено, оно технически готово к настройке и использованию. Однако для этого упражнения следующий этап проведет вас через процесс его удаления.
Удаление программного обеспечения и очистка с помощью make uninstall и rm
На этом заключительном этапе вы узнаете, как правильно удалить программное обеспечение, установленное из исходного кода, и очистить файлы сборки, вернув систему в исходное состояние. Это важная часть ручного управления программным обеспечением.
Большинство хорошо написанных пакетов исходного кода, использующих Makefile, предоставляют цель uninstall. Эта цель предназначена для отмены действий make install, удаляя все файлы, которые были скопированы в системные директории.
Сначала убедитесь, что вы все еще находитесь в директории ~/project/pure-ftpd-1.0.53. Как и процесс установки, процесс удаления требует прав администратора. Используйте sudo вместе с командой make uninstall.
sudo make uninstall
Вы увидите вывод, указывающий на то, что файлы удаляются из системных директорий, в которые они были установлены.
make[1]: Entering directory '/home/labex/project/pure-ftpd-1.0.53/src'
rm -f /usr/local/sbin/pure-ftpd /usr/local/sbin/pure-pw /usr/local/sbin/pure-pwconvert /usr/local/sbin/pure-authd /usr/local/sbin/pure-certd /usr/local/sbin/pure-uploadscript /usr/local/sbin/pure-quotacheck
rm -f /usr/local/share/man/man8/pure-ftpd.8 /usr/local/share/man/man8/pure-pw.8 /usr/local/share/man/man8/pure-pwconvert.8 /usr/local/share/man/man8/pure-authd.8 /usr/local/share/man/man8/pure-certd.8
make[1]: Leaving directory '/home/labex/project/pure-ftpd-1.0.53/src'
make[1]: Entering directory '/home/labex/project/pure-ftpd-1.0.53'
rm -f /usr/local/etc/pure-ftpd.conf
make[1]: Leaving directory '/home/labex/project/pure-ftpd-1.0.53'
Чтобы подтвердить, что программное обеспечение было удалено, вы можете снова использовать команду which.
which pure-ftpd
На этот раз команда не должна ничего вывести, так как исполняемый файл pure-ftpd был удален из /usr/local/sbin и больше не может быть найден в системном PATH.
Теперь, когда программное обеспечение удалено, последний шаг — удалить саму директорию с исходным кодом. Вы не можете удалить директорию, находясь внутри нее, поэтому сначала вернитесь в корневую директорию вашего проекта.
cd ~/project
Теперь используйте команду rm с опцией -r (рекурсивно), чтобы удалить директорию pure-ftpd-1.0.53 и все ее содержимое.
rm -r pure-ftpd-1.0.53
Эта команда не выведет ничего, если она выполнена успешно. Вы можете проверить удаление, просмотрев содержимое директории ~/project.
ls -l
Директория pure-ftpd-1.0.53 теперь удалена, и остался только исходный тарбол.
total 748
-rw-r--r-- 1 labex labex 765432 Nov 10 12:00 pure-ftpd-1.0.53.tar.gz
Поздравляем! Вы успешно завершили весь процесс сборки программного обеспечения из исходного кода: извлечение, конфигурация, компиляция, установка и, наконец, удаление и очистка.
Резюме
В этой лабораторной работе вы изучили стандартную процедуру сборки и установки программного обеспечения из исходного кода в системе Linux. Вы начали с извлечения сжатого архива исходного кода, также известного как тарбол (.tar.gz), с помощью команды tar. После извлечения вы перешли в директорию с исходным кодом, чтобы запустить скрипт ./configure, который подготавливает программное обеспечение к компиляции, проверяя системные зависимости и создавая Makefile. Наконец, вы использовали команду make для компиляции исходного кода в исполняемые двоичные файлы и make install для копирования программного обеспечения в соответствующие системные директории.
Кроме того, вы отработали правильный метод удаления программного обеспечения и очистки среды сборки. Вы узнали, как использовать команду make uninstall для удаления установленных файлов из системы. Чтобы завершить процесс очистки, вы удалили исходную директорию с кодом с помощью команды rm, гарантируя, что система вернулась в свое предыдущее состояние.



