Уважаемые посетители портала Kamensk.NET! Напоминаем вам, что будучи зарегистрированным пользователем вы получаете возможность оставлять комментарии к новостям на сайте и к топикам на форуме, иметь доступ к скрытым разделам и много других благ и привелегий. Пожалуйста заполните регистрационную форму, это отнимет у вас всего лишь несколько минут вашего времени.
Создание локального хранилища пакетов в Debian GNU/Linux
После штатной установки Debian GNU/Linux довольно часто требуется доустановить то или иное ПО. Благо под данный дистрибутив собрано огромное количество пакетов. Все бы ничего, однако полная поставка Debian GNU/Linux версии 5.0 для архитектуры i386 включает 5 DVD дисков или 31 CD диск. Поэтому через какое-то время "диджеить" дисками, мягко скажем, надоедает. Но если у вас имеется достаточно места на жёстком диске, то от этого неудобства можно легко избавиться, - достаточно создать локальное хранилище файлов или локальный репозитарий. Чем мы сейчас и займёмся.
Многие из ниже описанных операций можно выполнить используя, графические утилиты, однако более эффективным и универсальным способом является использование консольных утилит. Для их ввода можно воспользоваться любым эмулятором терминала, например, gnome-terminal, Terminal или konsole. Для выполнения большинства команд требуются права суперпользователя (root). Чтобы перейти в режим суперпользователя необходимо в запущенном сеансе набрать команду su, а затем пароль (во время ввода пароля он не отображается):
# su
:
Для начала необходимо определиться, на каком разделе мы будем хранить свой локальный репозитарий. Дело в том, что операционная система GNU/Linux настолько гибка, что мы можем одной командой смонтировать любой раздел или каталог в любой каталог:
# mount -t filesystem /dev/XXXN /mnt/folder, где
filesystem - тип файловой системы раздела XXXN;
/mnt/folder - каталог назначения, она же точка монтирования.
Если недавно установили GNU/Linux и плохо ориентируетесь в Linux-номенклатуре своих дисков, то уточнить информацию о имеющихся у вас разделов можно командой:
# blkid
В итоге на экране будет выведено что-то что-то вроде:
/dev/sda1: UUID="C2507BC1507BBAAD" TYPE="ntfs"
/dev/sda5: UUID="77ff0f0c-48f3-4e83-b2f8-c6061decc2ec" TYPE="reiserfs"
/dev/sda6: UUID="F6FC2AA9FC2A63D9" LABEL="VD" TYPE="ntfs"
/dev/sda7: UUID="9E644FDD644FB6B5" LABEL="MISIC" TYPE="ntfs"
/dev/sdb1: UUID="d4b53a8f-aafe-4bd4-a7d4-465c22f0f3ef" TYPE="reiserfs"
/dev/sdb2: UUID="b0925e53-3219-4795-b8c2-f8b1c881f43d" TYPE="reiserfs
Это более чем достаточно. Нам вообще необходима только первая и последняя колонки.
Узнать какие разделы и куда у нас уже смонтированы можно командой df с ключем -h:
# df -h
Файловая система Разм Исп Дост Исп% смонтирована на
/dev/sda5 40G 3,7G 36G 10% /
tmpfs 1014M 4,0K 1014M 1% /lib/init/rw
udev 10M 108K 9,9M 2% /dev
tmpfs 1014M 0 1014M 0% /dev/shm
/dev/sda1 27G 23G 3,6G 87% /mnt/sda1
/dev/sda5 40G 3,7G 36G 10% /mnt/sda5
/dev/sda6 40G 38G 1,9G 96% /mnt/sda6
/dev/sda7 45G 44G 783M 99% /mnt/sda7
/dev/sdb1 117G 109G 8,1G 94% /mnt/sdb1
/dev/sdb2 117G 80G 37G 69% /mnt/sdb2
Что к чему, думаю, понятно. Я привык называть точки монтирования по названию раздела.
Как видите мне удобнее всего разместить локальный репозитарий либо на корневом / разделе /dev/sda5 или на разделе /dev/sdb2, который смонтирован в каталог /mnt/sdb2. Второй вариант мне нравится больше. Итак, переходим в каталог /mnt/sdb2, используя следующую команду (или файловый менеджер mc):
# cd /mnt/sdb2
Создаем структуру каталогов, которая будет нашим репозитарием:
# mkdir -p localrepo/dists
И начинаем последовательно копировать имеющиеся в наличии диски:
# cp -a /media/cdrom0/pool /mnt/sdb2/localrepo/dists/lenny
Эту команду надо будет выполнить столько раз, сколько у вас дисков
. Чтобы каждый раз ее не набирать, можно воспользоваться историей команд - стрелками "вверх" и "вниз" эмулятора терминала.
В результате в каталоге lenny у нас появятся подкаталоги main и contrib. В первом содержатся пакеты, которые являются абсолютно свободными и используют открытые технологии. Во втором расположены пакеты, которые также распространяются под лицензиями, совместимыми с GNU GPL, но используют проприетарные технологии (например flash или java). Забегая вперед, скажу что в бескрайних просторах интеренета существуют еще так называемые non-free репозитарии. Но это тема для отдельной статьи.
В этих каталогах, по очереди, создадим подкаталоги binary-i386, где у нас будет расположены кеш-файлы пакетов:
# cd localrepo
# mkdir -p dists/lenny/contrib/binary-i386
Следующим шагом будет создание кеша пакетов:
# dpkg-scanpackages dists/lenny/contrib | gzip -9 > dists/lenny/contrib/binary-i386/Packages.gz
Проделаем тоже самое с main:
# mkdir -p dists/lenny/main/binary-i386
В каталоге main находится значительно большее количество пакетов, а потому команда создания кеша пакетов займет некоторое время:
# dpkg-scanpackages dists/lenny/main | gzip -9 > dists/lenny/main/binary-i386/Packages.gz
Далее нам необходимы для каждой группы пакетов по файлу Release. Они содержит описание группы, для группы пакетов contrib файл Release выглядит примерно так:
Archive: stable
Version: 5.0
Component: contrib
Origin: Debian
Label: Debian
Architecture: i386
И для группы пакетов main вот так:
Archive: stable
Version: 5.0
Component: main
Origin: Debian
Label: Debian
Architecture: i386
Их можно создать вручную в том же nano, а можно скопировать с первого (например) диска дистрибутива:
# cat /media/cdrom0/dists/lenny/contrib/binary-i386/Release > /mnt/sdb2/localrepo/dists/lenny/contrib/binary-i386/Release
# cat /media/cdrom0/dists/lenny/main/binary-i386/Release > /mnt/sdb2/localrepo/dists/main/contrib/binary-i386/Release
Затем необходимо скопировать и подправить общий файл Release:
# cat /media/cdrom0/dists/lenny/Release > /mnt/sdb2/localrepo/dists/lenny/Release
Он содержит что-то вроде этого:
Origin: Debian
Label: Debian
Suite: stable
Version: 5.0
Codename: lenny
Date: Sat, 14 Feb 2009 14:02:31 UTC
Architectures: i386
Components: main contrib
Description: Debian 5.0 Released 14 February 2009
MD5Sum:
1c80afc94000a696b00bcb07cebbfaed 93 main/binary-i386/Release
d59d8ac6cbb5cdab14bc7809d2ad3f72 4711376 main/binary-i386/Packages
8bfe144b95f5a71f839aecacc19cac97 1403086 main/binary-i386/Packages.gz
1ce1ebf7249a7f1cc2613f45d668b6da 107649 main/debian-installer/binary-i386/Packages
7b0f8153ec21fe916906767d8b5efc6a 30106 main/debian-installer/binary-i386/Packages.gz
9b38d1b3eff85f5f3e7da1b91bff07e3 96 contrib/binary-i386/Release
df5790bb3fd27fe1760ad9f99bb41596 7586 contrib/binary-i386/Packages
fc6fbb762630e9ca941e4ef286043a38 3179 contrib/binary-i386/Packages.gz
Нам необходимо затереть все строки после MD5Sum, включая саму фразу "MD5Sum:". Для этого открываем файл в редакторе по умолчанию (nano):
# nano Release
Или в любом другом. Я, например, предпочитаю использовать редактор, встроенный в mc (mcedit). И создаем заново контрольные суммы для файлов Packages.gz и Release :
apt-ftparchive release . >> Release
Помимо алгоритма MD5 эта команда подсчитает контрольную сумму ещё и по SHA1 и SHA256.
Осталось только подключить наш только что созданный репозитарий. Это можно сделать, воспользовавшись графической утилитой synaptic, но проще всего это сделать непосредственно подправив файл /etc/apt/sources.list:
# nano /etc/apt/sources.list
Комментируем наши диски (добавляем перед каждой строкой, объявляющий репозиторий типа "deb cdrom:" знак "#" и добавляем строку:
deb file:///mnt/sdb2/localrepo lenny contrib main
Cохраняем файл (в nano Ctrl+O) и выходим (Ctrl+X).
В принципе, на этом можно было ограничиться. Однако программы для установки (тот же synaptic) будут ругаться на отсутствие электронной подписи и будут совершенно правы, заявляя что подлинность данного репозитария не подтверждена. Но мы-то знаем, что создали наш репозитарий, используя официальные диски, а потому в качестве завершающего штриха подпишем наш новый репозитарий электронной подписью. Своей.
Для этого воспользуемся утилитой gpg:
# gpg --gen-key
Она в режиме диалога предложит выбрать тип ключа (я выбрал RSA длиной 2048 бит), срок годности (я выбрал бессрочный), попросит указать своё настоящее (мы же не собираемся распространять вредоносный код) имя, e-mail адрес и комментарий. Следующий шаг самый весёлый: необходимо будет совершить хаотичные действия (печатать на клавиатуре бессмысленный текст, двигать мышкой и.т.п). Это даст генератору случайных чисел возможность получить лучшую энтропию.
После вышеописанных действий будет создана ваша персональная электронная подпись. Её-то мы и применим, для подписи общего файла Release:
gpg -abs -o gpg -abs -o /mnt/sdb2/localrepo/Release.gpg /mnt/sdb2/localrepo/Release
На этом все
.
Последние комментарии