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