Якщо вам доводиться встановлювати програми з компакт-дисків, то мабуть ви неодноразово стикались з ситуацією, коли у приводі вже є, наприклад, музичний диск, або ж просто ліньки шукати в надрах робочого бардаку потрібний носій. В такому випадку альтернативою може стати локальний репозиторій доступних програм, створений на вінчестері. Окрім іншого, він ще й вбереже ваші диски та нервові клітини від псування ;о)
Отже, нашу задачу, як завжди в світі Лінукс-систем, можна вирішити кількома способами.
Репозиторій з образів дисків
Спершу потрібно отримати самі файли образів. З цим легко справиться команда штибу
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»