Создание локального репозитория пакетов из ISO-образов дистрибутива.

Мы создадим собственный репозиторий дистрибутива доступный на сервере локально, по сети по протоколу FTP или-и HTTP, а в виде ISO-образов по протоколу FISH (SSH), но, хранящийся фактически лишь в файлах-образах дистрибутива. Рассматривается реализация на платформе ALT Linux Server 4 (ALS4) однако данный способ переносим и на другие дистрибутивы, с соответствующими поправками. Особенностями ALS4 являются:

1) наличие 2-х DVD9 носителей и 2-х CD, которые суммарно занимают почти 17ГБ и, в целом, работа с DVD9 отличается малой производительностью, что приводит к повышенным затратам времени.
2) ProFTP входящий в дистрибутив не поддерживает "большие файлы"
3) ядро поддерживает лишь 4-е loop устройства (что несколько удивляет)
4) работа с репозиторием осуществляется средствами APT (http://en.wikipedia.org/wiki/Advanced_Packaging_Tool)

Что мы достигнем в итоге:

1) повышения производительности и удобство для работы с репозиторием дистрибутива (в разы);
2) достигнем максимальной эффективности хранения репозитория;
3) также, некоторые читатели заинтересуются виртуальными файловыми системами (VFS), которые, в частности,находят применение в построении защищённых информационных систем (ЗИС).

При этом, мы выполним весьма мало очень простых манипуляций, которые, хотя и потратят наше время, зато в дальнейшем, неоднократно принесут пользу (сэкономив время и усилия).

Вкратце рассмотрим состав дистрибутива (кому неинтересно - можно не заострять внимания)
Дистрибутив состоит из двух почти одинаковых частей (некоторые особенности присутствуют в каждой)
1-ая предназначена для архитектуры x86_32
2-ая предназначена для архитектуры x86_64
в свою очередь,каждая из этих частей состоит из:
1) установочного загрузочного (boot) CD, собственно (Server), с функциями Теста памяти и Аварийной загрузки
2) дополнительного DVD9 (Contrib) для которого "не гарантирована поддержка в рамках Server" (спасибо Афонину за уточнение)
упаковку, наклейки, инструкцию, лицензию мы не рассматриваем

А теперь собственно приступим к построению репозитория, предполагая, что сервер вы уже и только что установили с первого CD.
1. Необходимо сохранить ISO-образы дисков дистрибутива, причём сделать это можно и не только на сервере, а и на другой машине в сети, а также банально выкачать из сети, с сайта компании АЛЬТ Линукс, если позволяют финансы и провайдер. Всё же если вы располагаете дисками я укажу два самых простых (на мой взгляд) способа получения образов дисков: воспользоваться графической оболочкой k3b или в консоли dd (например dd if=/dev/cdrom of=/opt/cd1). Кроме того, если какая то архитектура вам не нужна (например x86-64), то просто ничего с ней не делайте - убъёте время траффик и т.д. Фактически, вы можете и не ощутить выигрыша от 64-х разрядной архитектуры, ибо Линукс-32 это не виндовс и способен обращаться к 4GB (HIGHMEM4G) of physical RAM а также и более, но уже с "нестандартным" ядром. Зато недостатки от Линукс-64 могут всплыть, например отсутствие wine32for64.
Если ваши образы дисков располагаются на другой машине нежели конечный сервер, а вы пользуетесь KDE, то можно воспользоваться протоколом FISH интегрированным в KDE для передачи файлов. Для этого, откройте обозреватель (konqueror) и в строке Адреса впишите fish://username@hostname причём, в качестве пользователя root выступать не может, укажите менее привилегированного пользователя, а вместо имени компьютера можно указать его IP:

возможно, вы ранее не пользовались этим сервером и он захочет передать вам свой ключ - примите его
далее вас попросят указать пароль - введите

всё. используя это окно вы сможете передать файлы образов любого размера на сервер совершенно обычными для графической оболочки способами, если что то не получается - проверьте права доступа на каталоги на сервере (например воспользовавшись в консоли ssh )

итак, я переписал файлы образов дисков на сервер в каталог /opt и назвал их вот так:

/opt/ALS4-x86-64.iso
/opt/ALS4-x86-32.iso
/opt/ALS4--DVD9-x86-64.iso
/opt/ALS4--DVD9-x86-32.iso

в этом же каталоге я создал
каталог mnt и два скрипта:
1) /opt/dmnt.sh для монтирования содержимого файлов образов в каталоге /opt/mnt/ (каждый в свою папку, не забудьте их тоже создать)

losetup /dev/loop0 ALS4--DVD9-x86-32.iso
losetup /dev/loop1 ALS4--DVD9-x86-64.iso
losetup /dev/loop2 ALS4-x86-32.iso
losetup /dev/loop3 ALS4-x86-64.iso
mount /dev/loop0 /opt/mnt/dvd32
mount /dev/loop1 /opt/mnt/dvd64
mount /dev/loop2 /opt/mnt/cd32
mount /dev/loop3 /opt/mnt/cd64

2) /opt/udmnt.sh для размонтирования файлов образов

umount /dev/loop0
umount /dev/loop1
umount /dev/loop2
umount /dev/loop3
losetup -d /dev/loop0
losetup -d /dev/loop1
losetup -d /dev/loop2
losetup -d /dev/loop3

далее я добавил символические ссылки на /opt/mnt в каталоги

/var/ftp/ALTLinux/Server4/
/var/www/apache2/html/

на самом сервере репозиториев, в /etc/apt/sources.list я записал:

# Local package resource list for APT goes here.
# To inspect package defined part, see /etc/apt/sources.list.d/*.list
rpm file:/opt/mnt/cd32/ ALTLinux asterisk base disk
rpm file:/opt/mnt/dvd32/ ALTLinux classic

а клиентам прописал в /etc/apt/sources.list заблаговременно выложив его на ftp

# Local package resource list for APT goes here.
# To inspect package defined part, see /etc/apt/sources.list.d/*.list
rpm ftp://192.168.64.23/ALTLinux/Server4/mnt/cd32/ ALTLinux asterisk base disk
rpm ftp://192.168.64.23/ALTLinux/Server4/mnt/dvd32/ ALTLinux classic

всё. запускаем

apt-get update

на всех машинах, (если что-то не так - разбираемся с каталогами и правами доступа)

ну, напоследок, расскажу в чём в вкратце смысл на примерах из всего выше:
командой

losetup /dev/loop0 ALS4--DVD9-x86-32.iso

я ассоциирую регулярный файл ALS4--DVD9-x86-32.iso с устройством петли 0 (/dev/loop0) а далее я могу монтировать устройство петли - как любое блочное устройство в указанный каталог

mount /dev/loop0 /opt/mnt/dvd32

таким образом я монтирую VFS хранящуюся в файле ALS4--DVD9-x86-32.iso в каталог

/opt/mnt/dvd32

чтобы размонтировать VFS я применяю

umount /dev/loop0

а чтобы освободить устройство петли 0 (/dev/loop0) от ассоциации с файлом ALS4--DVD9-x86-32.iso я применяю:

losetup -d /dev/loop0

если что - читайте маны и гуглите, или в жабу стучитесь

ПрикреплениеРазмер
fish_home.jpg39.63 кб
fish_login.jpg18.35 кб

Комментарии

Увеличение количества loop device

Проблема с маленьким количество loop device решается 2мя способами:
1. Перекомпиляцией ядра с изменением этого самого числа в одном из .h файлов
2. Передаче ядру при загрузке опции с количеством этих самых loop device.
Подробности обоих способов стоит уточнить в Google ибо последний раз я с этим игрался 2 года назад.
--
NixDev Open Source solutions for life.

Посмотрел исходники ядра

linux/drivers/block/loop.c

* Maximum number of loop devices now dynamic via max_loop module parameter.
* Russell Kroll 19990701
*
* Maximum number of loop devices when compiled-in now selectable by passing
* max_loop=<1-255> to the kernel on boot.
* Erik I. Bolsø, , Oct 31, 1999

проверяем

[cn@main ~]$ sudo su
[root@main ~]# lsmod | grep loop
[root@main ~]# modprobe loop max_loop=32
[root@main ~]# lsmod | grep loop
loop 16776 0
[root@main ~]#
[root@main ~]# mc
[root@main ~]# losetup /dev/loop30 virtual

так что действительно - вот вариант решения modprobe loop max_loop=NNN