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

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

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

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

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

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