Резервная копия сервера пакетов

Posted by

Задача: сохранить файлы установленных на системе пакетов если до этого не использовали сервер пакетов (apt-cacher).

Предыстория: ранее в системе был развернут сервис на основе отслеживания изменений в файлах lsyncd с подключенными репозитариями, и я хочу подстраховаться на случай если вдруг данные репозитарии по прошествии некоторого времени исчезнут. Так обычно бывает когда релиз используемого дистрибутива по мнению автора уже не актуален и вышли более новые релизы, к примеру Ubuntu 14.04 или уже новый Ubuntu 16.06. Понимаю что на этот случай лучше использовать сервер пакетов (apt-cacher), но также хочу разобрать еще одну альтернативу этому или как бекапить пакеты на сервере пакетов (apt-cacher).

Все дальнейшие действия проводятся на .5 Server amd64

Для того чтобы использовать забекапленные файлы нужно создать файл индекса:

ekzorchik@srv-mon:~$ sudo apt-get install dpkg-dev -y

ekzorchik@srv-mon:~$ mkdir ~/localrepository

ekzorchik@srv-mon:~$ sudo cp /var/cache/apt/archives/*.deb ~/localrepository/

ekzorchik@srv-mon:~$ du -sh localrepository/

135M localrepository/

ekzorchik@srv-mon:~$ cd localrepository/

ekzorchik@srv-mon:~/localrepository$ sudo dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz

ekzorchik@srv-mon:~/localrepository$ ls -lh Packages.gz && file $_

-rw-rw-r— 1 ekzorchik ekzorchik 62K Apr 29 12:47 Packages.gz

Packages.gz: gzip compressed data, from Unix, last modified: Fri Apr 29 12:47:40 2016, max compression

ekzorchik@srv-mon:~/localrepository$ cd ~/

ekzorchik@srv-mon:~$ tar czvf localrepository.tar.gz localrepository/

ekzorchik@srv-mon:~$ ls -lh localrepository.tar.gz

-rw-rw-r— 1 ekzorchik ekzorchik 133M Apr 29 12:48 localrepository.tar.gz

Теперь чтобы в последствии на другой системе с релизом Ubuntu 12.04.5 использовать данные файлы (deb-файлы) забекапленного репозитария нужно, перенести каталог localrepository на новую систему, подключить данный каталог в файле описания /etc/apt/sources.list, обновить информацию о добавленных репозитариях и установить необходимый пакет, к примеру lsyncd (должен будет установить пакет с версией: 2.1.4-0~ppa1), вот и проверим:

Копирую полученный архив на основную систему:

ekzorchik@srv-mon:~$ scp localrepository.tar.gz aollo@10.7.8.135:/home/aollo

The authenticity of host ‘10.7.8.135 (10.7.8.135)’ can’t be established.

ECDSA key fingerprint is 1b:c9:e6:7e:cd:9d:33:7c:78:aa:f4:54:49:6b:87:40.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added ‘10.7.8.135’ (ECDSA) to the list of known hosts.

aollo@10.7.8.135’s password:

localrepository.tar.gz 100% 111MB 27.7MB/s 00:04

ekzorchik@srv-mon:~$ sudo poweroff

Далее систему где производился бекап каталога пакетов откатываю на снапшот дефолтной установки (поясню: данная система у меня тестовая развернутая с использованием Virtualbox на основной системы хоста 10.7.8.135):

aollo@system:~$ VBoxManage list vms | grep UServer

«UServer» {08ca2c5e-cf55-4561-9a57-dfd651f5270f}

Отобразить список всех снапшотов для данной виртуальной машины:

aollo@system:~$ VBoxManage snapshot UServer list | grep Original

Name: OriginalSystem (UUID: 84526422-05b8-4dd7-bf30-134fb25fc267)

Name: OriginalSystem (UUID: a20dd4b1-53e5-4602-830a-2d82f7f76675)

Name: OriginalSystem + script configure (UUID: 249f0c3b-23f8-4e8b-bb40-1c7bb42575f4) *

Найдя тот снапшот который называется: OriginalSystem + script configure откатываюсь на него:

aollo@system:~$ VBoxManage snapshot UServer restore "OriginalSystem + script configure"

Restoring snapshot 249f0c3b-23f8-4e8b-bb40-1c7bb42575f4

0%…10%…20%…30%…40%…50%…60%…70%…80%…90%…100%

Запускаю данную виртуальную систему:

aollo@system:~$ VBoxManage startvm UServer

Waiting for VM «UServer» to power on…

VM «UServer» has been successfully started.

Если в системе при подготовке виртуальной системы к рабочему моменту были установлены дополнительные утилиты от VirtualBox по данной заметке, то когда командой выше я откатился на подготовленный снапшот и запустил VM, можно посмотреть какой динамически выданный IP адрес присвоился виртуальной машине посредством следующего запроса:

aollo@system:~$ VBoxManage guestproperty get UServer "/VirtualBox/GuestInfo/Net/0/V4/IP"

Value: 10.7.8.120

Отобразить все свойства виртуальной машины:

aollo@system:~$ VBoxManage guestproperty enumerate UServer

если же утилиты Guest Additions не стоят, то запрос ничего не вернет

aollo@system:~$ VBoxManage guestproperty get UServer "/VirtualBox/GuestInfo/Net/0/V4/IP"

No value set!

и придется все же посредством сочетания Alt+Tab переключится в окно запущенной машины, авторизоваться в системе и посмотреть IP адрес, впрочем кому как удобнее.

Копирую на виртуальную систему сохраненный пакет бекапа репозитария:

aollo@system:~$ scp localrepository.tar.gz ekzorchik@10.7.8.120:/home/ekzorchik

Подключаюсь к виртуальной системе через SSH:

aollo@system:~$ ssh -l ekzorchik 10.7.8.120

Распаковываю пакет бекапа:

ekzorchik@srv-mon:~$ tar xvf localrepository.tar.gz

Подключаю каталог localrepository как каталог репозитария:

ekzorchik@srv-mon:~$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup

ekzorchik@srv-mon:~$ sudo nano /etc/apt/sources.list

deb file:/home/ekzorchik/localrepository/ ./

ekzorchik@srv-mon:~$ sudo rm -Rf /var/lib/apt/lists/

ekzorchik@srv-mon:~$ sudo apt-get update

Проверяю что система видит пакет lsyncd версии 2.1.4-0~ppa1:

ekzorchik@srv-mon:~$ apt-cache show lsyncd | grep Version

Version: 2.1.4-0~ppa1

Version: 2.0.4-1

Видит! Что мне и требовалось, а теперь ставлю его:

ekzorchik@srv-mon:~$ sudo apt-get install lsyncd=2.1.4-0~ppa1 -y --force-yes

ekzorchik@srv-mon:~$ lsyncd --version

Version: 2.1.4

Получилось. Подытожу, я разобрал для себя как забекапить файлы пакетов которые были в систему или будут задействованы при использовании сервера пакетов apt-cacher. Просто люблю перестраховывать на те ошибки которые совершил не осознавая что так могло случиться. Предупрежден значит вооружен. Надеюсь и для кого-нибудь данный материал это заметки окажется полезен. На этом я прощаюсь и до новых встреч, с уважением автор блога — ekzorchik.