Чтение онлайн

ЖАНРЫ

Linux: Полное руководство

Аллен Питер В.

Шрифт:

Из ключей apt-get полезными для вас будут – f и – d. Ключ – f требует попытаться исправить нарушенные зависимости, а при указании ключа – d пакеты только скачиваются из источника, но не устанавливаются. Ключ – -no-upgrade, указанный при установке группы пакетов, запрещает обновлять те из них, что уже установлены. Еще одна полезная, но опасная возможность — ключ – -force-yes, принуждающий программу не задавать вопросов, выполняя потенциально разрушительные действия. Иногда она действительно необходима.

Для установки пакета не по сети, а с дистрибутивного компакт-диска предназначена команда apt-cdrom.

7.5.3.

Установка из пакетов, содержащих исходный код

Иногда в пакетах RPM находятся не откомпилированные версии программ, а их исходный код. Признаком этого является слово «src» вместо названия архитектуры. Для установки такого пакета введите:

$ rpm -iv <пакет>.src.rpm

Менеджер пакетов распакует исходные тексты в каталог Red Hat: по умолчанию это

/usr/src/redhat
, но вы можете установить другой каталог директивой topdir в конфигурационном файле
/etc/rpmrc
. В подкаталог SOURCES будут распакованы исходные тексты и заплатки (патчи) к ним, в подкаталог SPECS — spec-файлы, содержащие инструкции по прикладыванию заплаток и последующей сборке. Чтобы собрать программу, выполните команды:

$ cd /usr/src/redhat/SPECS

$ rpm -bp <пакет>.spec

Явление патча (заплатки — мы же на русском языке говорим) очень распространено в мире открытого кода, поэтому я скажу о нем здесь. Допустим, кто-то нашел и исправил ошибку в каком-нибудь известном пакете. Исправление может заключаться в двух строках кода, так что же — выкладывать в общий доступ исправленные исходники целиком? Нет, он распространяет заплатку, которую желающие могут приложить сами. Заплатка представляет собой текстовый файл, содержащий список отличий исправленного кода от исходного.

Такой список в стандартном виде генерирует утилита diff с ключами – uNr. Чтобы его приложить, нужно перейти в корневой каталог дерева исходного кода пакета и выполнить команду

$ patch -р0 < <файл_заплатка>

# < - это знак перенаправления ввода

Ключ -p указывает, сколько отделенных «/» частей нужно отщипнуть от путей к файлам, подлежащим исправлению (вдруг каталог пакета у автора заплатки назывался иначе?).

Приложив заплатку, выполните обычные команды сборки:

$ ./configure

$ make

$ make install

7.6. Клонирование и восстановление системы

Клонирование — это создание точной (побитной) копии исходного носителя. Носителем в нашем случае будет корневая файловая система Linux. Клонированная копия называется образом.

Если вам нужно установить дистрибутив на несколько компьютеров одинаковой конфигурации (например, вы администрируете интернет-зал), то целесообразно установить и настроить его на одной машине, а на другие — склонировать. Для домашней системы из одного компьютера клонирование тоже имеет смысл: если что-то вдруг «слетит», то вы сможете быстро восстановить исходное состояние системы простым развертыванием образа. На развертывание образа нужно намного меньше времени, чем на установку и настройку системы.

Перезагрузитесь в однопользовательском режиме (о режимах и вариантах загрузки сказано в п.9.1.1). Введите команду mount, чтобы узнать, какой раздел содержит корневую файловую систему:

/dev/hda1 on / type ext3 (rw,noatime)

none on /proc type proc (rw)

none on /sys type sysfs (rw)

Корневая файловая система расположена на разделе

/dev/hda1
. Образ именно этого раздела мы будем сохранять на другом носителе. Носителем может быть другой жесткий диск — я буду использовать внешний USB-винчестер. Для его подключения должен быть загружен модуль
usb_storage
.
Создадим каталог
/mnt/imag
e и примонтируем к нему USB-винчестер:

# modprobe usb_storage

# mkdir /mnt/image

# mount /dev/sda1 /mnt/image

Все, что осталось сделать, — это перемонтировать корневую файловую систему в режиме «только чтение» и создать образ:

# sync

# mount -о remount.ro /

# dd if=/dev/hda1 of=/mnt/image/image.bin

Подробно описывать утилиту dd не стану — это очень хорошо сделано в справочной системе. Скажу только, что кроме dd существует еще и утилита dd_rescue, которая при клонировании пропускает плохие секторы и делает максимально возможную копию файловой системы. Для меня, да и для вас использование этой утилиты неактуально — ведь винчестеры меняют минимум один раз в год, поэтому не думаю, что у вас будет «битый» винчестер.

Теперь рассмотрим, как можно восстановить систему. Для восстановления системы вам понадобится загрузочный компакт-диск Linux, Подойдет первый диск любого дистрибутива, даже несовместимого с вашим. Если вы используете не LiveCD, а простой загрузочный диск, для перехода на текстовую консоль нажмите Ctrl+Alt+F2. Подмонтируем наш внешний винчестер:

# mkdir /image

# modprobe usb_storage

# mount /dev/sda1 /image

Теперь на новом винчестере нужно создать разделы. Это можно сделать с помощью утилиты fdisk или с помощью программы установки — как вам удобнее. Если же вы восстанавливаете систему после сбоя, ничего создавать не нужно — все уже создано. Не забудьте только создать раздел подкачки (тип раздела

/dev/hda2
должен быть Linux swap):

# mkswap /dev/hda2

Теперь развернем образ (обратите внимание на параметры if и of программы dd — на этот раз их аргументы поменялись местами):

# dd if=/image/image.bin of=/dev/hda1

Сейчас нам нужно изменить корневую файловую систему, чтобы попасть «внутрь» развернутого образа:

# mkdir /install

# mount /dev/hda1 /install

# chroot /install /bin/bash

Теперь корнем стал каталог

/install
, к которому примонтирован новый винчестер, а в качестве командной оболочки используется
/bin/bash
. Все, что нам осталось сделать — это перезаписать загрузчик. Если у вас LILO, введите команду:

# lilо

А если GRUB:

# grub-install /dev/hda

Теперь перезагрузите компьютер (reboot) — ваша система успешно восстановлена после клонирования.

Глава 8

Язык командного интерпретатора

Для автоматизации часто выполняемых работ по обслуживанию системы вам понадобится объединять команды в сценарии. С простейшими сценариями, обеспечивающими последовательное выполнение перечисленных команд, вы уже познакомились в гл. 3. Уточню только, как система обрабатывает сценарии. Она ищет в первой строке файла сценария выражение

#!/абсолютный/путь/к/программе/интерпретатору/сценария

и передает сценарий ей на обработку. Как правило, эта программа — либо одна из установленных в системе оболочек (например,

#!/bin/tcsh
), либо один из интерпретирующих языков (
#!/usr/bin/perl
), либо ваш собственный интерпретатор:
#!/usr/bin/my_program
. Если сценарий предназначен для обработки оболочкой sh, то ее имя указывать необязательно. Между символами # и ! не должно быть пробелов.

Поделиться с друзьями: