Створення локальних репозиторіїв Дебіен

Sat, 03 Nov 2012 00:02:56 +0200
/tag/debian, /tag/ЯКЦЕ

Якщо вам доводиться встановлювати програми з компакт-дисків, то мабуть ви неодноразово стикались з ситуацією, коли у приводі вже є, наприклад, музичний диск, або ж просто ліньки шукати в надрах робочого бардаку потрібний носій. В такому випадку альтернативою може стати локальний репозиторій доступних програм, створений на вінчестері. Окрім іншого, він ще й вбереже ваші диски та нервові клітини від псування ;о)

Отже, нашу задачу, як завжди в світі Лінукс-систем, можна вирішити кількома способами.

Репозиторій з образів дисків

Спершу потрібно отримати самі файли образів. З цим легко справиться команда штибу

dd if=/dev/cdrom of=debian-image.iso

чи графічний інструмент K3B.

Після цього отримані образи (для Дебіен 4.0 це буде 3 образи ДВД дисків або 21 - КД) потрібно примонтувати щоб їх вміст був доступний так само, ніби в привід вставлено відповідний диск:

# mount -o loop debian4.0-amd64-dvd1.iso /mnt/dvd1
# mount -o loop debian4.0-amd64-dvd2.iso /mnt/dvd2
# mount -o loop debian4.0-amd64-dvd3.iso /mnt/dvd3

І внести зміни у файл /etc/apt/sources.list - закоментувати рядки з компакт-дисками і додати наступні:

deb file:///mnt/dvd1         etch contrib main
deb file:///mnt/dvd2         etch contrib main
deb file:///mnt/dvd3         etch contrib main

Переваги такого способу:

локальнй репозиторій створюється просто і швидко

на додачу до безпосередньо репозиторію ми маємо резервні копії образів дисків, котрі в разі потреби можна записати на зовнішні носії

Недоліки такого способу:

у системі існують кілька додаткових точок монтування, котрі потрібно відновлювати щоразу після перевантаження системи (в принципі, недолік спірний)

такий репозиторій неможливо поновлювати

Повноцінний репозиторій

При створенні повноцінного репозиторію нам потрібно послідовно примонтувати кожен з зовнішніх носіїв та синхронізувати каталог pool на носії з вибраним локальним каталогом:

# mount /cdrom
# rsync -av --progress /cdrom/pool /home/debian
# eject

Тобто репозиторій у нас буде розташовано в каталозі /home/debian (зауважте, що повний об'єм цього каталогу займатиме гігабайт 10-12, так що потурбуйтесь про наявність достатньої кількості вільного місця. Ну й повторіть дану операцію для кожного вашого диску. Зауважте, що дана операція займе більше часу, аніж пряме формування образу диску.

Далі створюємо каталоги, в котрих будуть розташовані бази даних з інформацією про наявні пакунки (в даному випадку це дистрибутив «etch», двійкові - «binary» - пакунки та архітектура «amd64»). Ці каталоги мають бути створені відповідно до підкаталогів каталогу /home/debian/pool, тобто якщо у вас там не буде, наприклад, секції non-free, то й в каталозі dists її не потрібно.

# install -d dists/etch/main/binary-amd64
# install -d dists/etch/contrib/binary-amd64
# install -d dists/etch/non-free/binary-amd64

Далі потрібно згенерувати інформацію про звантажені пакунки у призначені для цього каталоги. Зверніть увагу, що при цьому ви повинні знаходитись у каталозі, в котрому ви формуєте репозиторій (в нашому випадку /home/debian)

# cd /home/debian
# apt-ftparchive packages pool/main/ >dists/etch/main/binary-amd64/Packages
# apt-ftparchive packages pool/contrib/ >dists/etch/contrib/binary-amd64/Packages
# apt-ftparchive packages pool/non-free/ >dists/etch/non-free/binary-amd64/Packages
# cd dists/etch/main/binary-amd64/
# gzip >Packages.gz <Packages
# cd ../../contrib/binary-amd64/
# gzip >Packages.gz <Packages
# cd ../../non-free/binary-amd64/
# gzip >Packages.gz <Packages**

І внести зміни у файл /etc/apt/sources.list - закоментувати рядки з компакт-дисками і додати наступний:

deb file:///home/debian         etch contrib main

Переваги такого способу:

ми маємо повноцінний локальний репозиторій, котрий можна роздавати по мережі, синхронізувати з іншими репозиторіями, поновлювати з інтернету чи компакт-дисків і т.д.

Недоліки такого способу:

синхронізація і генерування Packages.gz займає багато часу (у мене на Athlon XP 2500+ - приблизно 25 хвилин)

Останній штрих

Оновіть дані системи керування пакунками - щоб вона знала, що тепер у неї все, що треба, доступне локально:

apt-get update

Усьо! Користуйтесь apt, aptitude чи synaptic на власний розсуд.

А як щодо оновлень?

Отже, у нас є налаштований локальний репозиторій. І раптом ми знайшли в інтернеті програму, котра нам неймовірно потрібна, та ще й саме така, якої немає в готовому репозиторії (все-таки стабільний Дебіен він на те й стабільний, щоб бути дещо консервативним). Тут у нас є два шляхи - можна оновитись до тестової версії Дебіен і встановити потрібну програму, а можна створити додатково ще один репозиторій, куди складати такі ось пакунки, і користуватись ним на свій страх і ризик. Переваги такого методу у тому, що у вас залишиться в основному стабільна система і не доведеться звантажувати кілька гігабайт пакунків для того, щоб встановити нову версію якогось Тюксрейсера. Недолік (а як же без нього) - треба самому турбуватись про наявність необхідних версій залежних пакунків.

А тепер - до праці.

Мені знадобилось поставити на свій Деібен Етч Лазарус - Дельфі-подібне середовище програмування. А його там немає - Лазаруса-то. Ну, значить зробимо:

# cd /home/debian
# install -d dists/testing/main/binary-i386
# install -d pool/testing/main
 ... Скопіювати що треба в main
# apt-ftparchive packages pool/main > dists/testing/main/binary-i386/Packages
# gzip >dists/testing/main/binary-i386/Packages.gz <dists/testing/main/binary-i386/Packages
# echo "deb     file:///home/debian/      testing main" >> /etc/apt/sources.list
# apt-get update

Ось власне і все. Для Лазаруса довелось звантажити компілятор Фріпаскаля для задоволення залежностей; все інше підійшло від Етча.

Тепер якщо у вас появиться якийсь новий пакунок, спробуйте закинути його в pool/testing/main, зробити

# apt-ftparchive packages pool/main > dists/testing/main/binary-i386/Packages
# gzip >dists/testing/main/binary-i386/Packages.gz <dists/testing/main/binary-i386/Packages
# apt-get update

і у вас буде шанс коректно встановити його за допомогою apt/synaptic/aptitude.

Увага!
Будьте обережними, описаний рецепт не є коректним способом підтримки вашого Дебіена в бойовій готовності, а лише обхідним варіантом установки специфічного програмного забезпечення потрібних версій.

Варіант оновлення по мережі

Виникла якось потреба з такого репозиторію, зробленого на домашньому стаціонарному комп'ютері, оновити ноутбук. Піднімати на таку справу apache/proftpd/etc не захотілось, тому пішов обхідним шляхом.

На стаціонарному комп'ютері:

miwa@debian:/usr/home/miwa$ apt-cache search 'nfs server'
kernel-patch-nfs-ngroups - Client-side bypassing of ngroups limitation in NFS protocol
nfs-kernel-server - Kernel NFS server support
nfs-user-server - User space NFS server
miwa@debian:/usr/home/miwa$ sudo apt-get install nfs-user-server

У файл /etc/exports додав рядок:

/   192.168.1.24(rw,all_squash,anonuid=1000,anongid=1000)

На лептопі:

mount -t nfs -o rsize=8192,wsize=8192 192.168.1.1:/usr /mnt/ext

А далі - підключити репозиторій з /mnt/ext/home/debian:

sudo echo "deb file:///mnt/ext/home/debian testing main" >> /etc/apt/sources.list

і оновити базу даних APT

sudo apt-get update

Додаткова інформація

Формування пакунку з додатковими шрифтами на форумі «Lafox.net»

Встановлення wine на архітектурі amd64 на форумі «Lafox.net»