MyTetra Share
Делитесь знаниями!
О, смотри-ка какое хорошее место. Дайте два!
создание собственного репозитария на основе кеша apt
12.06.2012
14:32
Раздел: linux

создание собственного репозитария на основе кеша apt

создаём папку, к которой будут иметь доступ другие компьютеры

это может быть либо ftp сервер, либо папка для записи на CD/DVD

1. mkdir $HOME/my-repo


затем переходим в папку с кешем либо скопление deb файлов

2. cd /var/cache/apt/archives/


командуем сгенерировать список пакетов и описаний

3. dpkg-scanpackages . /dev/null | gzip -9c > $HOME/my-repo/Packages.gz

этот конвеер просканирует весь список пакетов текущей папке (/var/cache/apt/archives/)

выдаст список описаний пакетов, заархивирует и сложит в файл $HOME/my-repo/Packages.gz

кстати, будет сгенерирован список самых свежих версий пакетов, все устаревшие будут пропушенны

файл Packages.gz будет обрабатывать утилитой обновления списка пакетов

теперь нам надо выдрать из этого списка имена файлов пакетов

чтобы увидеть что нам надо выполните команду

cat $HOME/my-repo/Packages.gz |gunzip

на каждый пакет будет блоке типа:


Package: gnome-cards-data

Source: gnome-games

Version: 1:2.20.1-0ubuntu1

Architecture: all

Maintainer: Ubuntu Desktop Team <ubuntu-desktop@lists.ubuntu.com>

Installed-Size: 1132

Conflicts: gnome-games-data (<< 1:2.17.3)

Filename: ./gnome-cards-data_1%3a2.20.1-0ubuntu1_all.deb

Size: 338958

MD5sum: 240bfb1cf608360626030f8baf092315

Section: gnome

Priority: optional

Description: data files for the GNOME card games

This package contains pictures of card decks used by the card-based

GNOME games. Different themes are provided.


нам интересна строка:

Filename: ./gnome-cards-data_1%3a2.20.1-0ubuntu1_all.deb

высекаем её следующим образом:

cat $HOME/my-repo/Packages.gz |gunzip |grep "^Filename: "

а точнее только имя файла ./gnome-cards-data_1%3a2.20.1-0ubuntu1_all.deb

cat $HOME/my-repo/Packages.gz |gunzip |grep "^Filename: " | awk '{ print $2 }'

теперь надо преобразовать из списка в длинную строку, чтобы передать её команде ...

cat $HOME/my-repo/Packages.gz |gunzip |grep "^Filename: " | awk '{ print $2 }'|xargs

ну а теперь передаём эту конструкцию команде cp, для копирования в созданную нами папку

cp `cat $HOME/my-repo/Packages.gz |gunzip |grep "^Filename: " | awk '{ print $2 }' |xargs ` $HOME/my-repo/


для создания образа диск для записи можно использовать команду

mkisofs -r -V "my-repo" -o $HOME/my-repo.iso $HOME/my-repo/



после того как команда отработет, в $HOME/my-repo/ будет локальный репозитарий

если эту папку записать на CD/DVD и смонтировать этот диск в /media/cdrom

то в /etc/apt/sources.list

в самое начало нужно добавить строчку

deb file:/media/cdrom/my-repo/ ./

а если папка my-repo будет доступна на ftp по ftp://server-url/os/linux/ubuntu/my-repo

то в /etc/apt/sources.list

в самое начало нужно добавить строчку

deb ftp://server-url/os/linux/ubuntu/my-repo ./


после того как добавили эту строчку делаем apt-get update

и всё, теперь синаптик знает все пакеты с вашего локального репозитария


для ленивых приведу полный текст команды создания локального репозитария (одной строкой):

sudo apt-get install dpkg-dev && mkdir $HOME/my-repo && cd /var/cache/apt/archives/ && dpkg-scanpackages . /dev/null | gzip -9c > $HOME/my-repo/Packages.gz && cp `cat $HOME/my-repo/Packages.gz |gunzip |grep "^Filename: " | awk '{ print $2 }' |xargs ` $HOME/my-repo/ && mkisofs -r -V "my-repo" -o $HOME/my-repo.iso $HOME/my-repo/



--------------------

ядоложик


koct9i 15.1.2008, 13:22

Сообщение #2



Завсегдатай



Группа: Пользователи

Сообщений: 205

Регистрация: 27.4.2007

Из: Москва - Киров

Пользователь №: 1502



зачем? apt-cacher использовать нельзя?


поботай ещё awk, grep | awk можно заменить одним авком, а cat | gunzip заменить на zcat


xargs ты как-то странно с cp используешь, явно свалится при большом количестве пакетов



--------------------

anidb


Ушелец 7.2.2008, 14:06

Сообщение #3



FAQ-мастер



Группа: Пользователи

Сообщений: 982

Регистрация: 22.12.2006

Пользователь №: 346



2ffsdmad

Прежде чем запускать dpkg-scanpackages, нужно установить пакет dpkg-dev. По умолчанию он не установлен.

А вообще, очень толковое и внятное руководство. Респект! Может, есть смысл переименовать тему в "HOW-TO создание локального репозитария"?



--------------------

Незваный "Гость" хуже Гагарина

(народная поговорка марсианских сисадминов)

Как правильно задавать вопросы в технических форумах


ffsdmad 8.2.2008, 13:25

Сообщение #4



Ходжа Насреддин



Группа: Пользователи

Сообщений: 3327

Регистрация: 19.10.2006

Из: Киров

Пользователь №: 87



Цитата(Ушелец @ 7.2.2008, 14:06) [snapback]145411[/snapback]

2ffsdmad

Прежде чем запускать dpkg-scanpackages, нужно установить пакет dpkg-dev. По умолчанию он не установлен.

А вообще, очень толковое и внятное руководство. Респект! Может, есть смысл переименовать тему в "HOW-TO создание локального репозитария"?



для уточнения

Код

[b]sudo apt-get install dpkg-dev && ....



но я забыл установить mkisofs

вот она, команда сборки собственного репозитария


Код

sudo apt-get install dpkg-dev mkisofs; mkdir $HOME/my-repo && cd /var/cache/apt/archives/ && dpkg-scanpackages . /dev/null | gzip -9c > $HOME/my-repo/Packages.gz && cp `cat $HOME/my-repo/Packages.gz |gunzip |grep "^Filename: " | awk '{ print $2 }' |xargs ` $HOME/my-repo/ && mkisofs -r -V "my-repo" -o $HOME/my-repo.iso $HOME/my-repo/


Так же в этом разделе:
← Содержание ...
 
MyTetra Share v.0.35
Яндекс индекс цитирования