Главная Файлы Форум Галерея Гостевая книга Обратная связь Карта сайта Поиск
 

 

Моё место работы

СитиСервис
  • Заправка и ремонт лазерных картриджей
  • Ремонт любых принтеров и копиров
  • Оригинальные и совместимые картриджи
  • Доставка бесплатно (от 2-х картриджей)
  • Накопительная система расчётов для корпоративных клиентов
Телефон
+7 (4722) 373-983
8-980-326-01-23
Адрес E-mail
mybelpost@gmail.com

Привет, Гость

Войти
Идентификация
Я забыл свой пароль
Регистрация

Разделы -> Статьи -> Debian GNU/Linux -> Репозиторий из устан...

Репозиторий из установленных пакетов Debian GNU/Linux

Установил Debian. Всё отлажено и работает. Система оказалась смешанной из нескольких дистрибутивов и разных репозиториев - stable, sid и репозиторий multimedia, ну и свои пакетные сборки до кучи. Как такой "винигрет" повторить на другом ПК? -Да, просто! Нужно собрать все установленные в систему пакеты в свой репозиторий, подключить его в sourcess.list и использовать как официальный репозиторий Debian.
Информации о том, как сздать репозиторий Debian в сети много, есть официальная Wiki Debian.

Однако, для себя и может быть ещё для кого-то, здесь выложу готовое решение с помощью bash-скриптов.

Первое, что нужно сделать - это создать каталог для будущего репозитория.
Открываем терминал и командуем:

mkdir -p ./repo/pool/soft/binary-i386

Т.е. создаём вереницу каталогов /pool/soft/binary-i386 начиная от текущего места расположения терминала.
Далее, заходим терминалом в созданный каталог binary-i386:

cd ./repo/pool/soft/binary-i386

Получаем права root и формируем список всех установленных пакетов:

dpkg --get-selections | sed '/deinstall/d' | awk '{ print $1 }' > ./packlist

Затем, собираем все пакеты в каталог binary-386

cat ./packlist | while read line; do dpkg-repack $line; done

Или одной строкой:

dpkg --get-selections | sed '/deinstall/d' | awk '{ print $1 }' | while read line; do dpkg-repack $line; done


Для упрощения работы, все выше приведённые манипуляции заключаем в bash-скрипт, к примеру вот такой:

#! /bin/bash
# Скрипт запускается в каталоге repo
# Скрипт перепаковывает весь установленный через apt софт и складывает deb-пакеты в
# каталог ./pool/soft/binary-i386 относительно каталога repo

if [[ -f "/usr/bin/dpkg-repack" ]]; then

IFS=$'\t\n';

mkdir -p ./pool/soft/binary-i386;
cd ./pool/soft/binary-i386;

dpkg --get-selections | sed '/deinstall/d' | awk '{ print $1 }' | while read line; do dpkg-repack $line; done

echo
echo "Готово\!";
echo

else
echo "Не найдено приложение /usr/bin/dpkg-repack\! Дальнейшая работа скрипта невозможна\! Установите dpkg-repack из репозитория и повторите попытку.";

fi

Сохраняем скрипт с любым именем, делаем его исполнимым. Перемещаем скрипт в созданный каталог repo и запускаем его с правами root.
Сценарий работает долго - зависит от количества установленных deb-пакетов. Наличие кеша apt на работу скрипта не влияет.

После сбора всех пакетов нужно создать репозиторий.
Тут я прибег к скрипту найденному на Хабре. В своей статье я просто повторю текст инструкции с Хабра.

1. Создаём ключ DEB-GPG-KEY. Стандартно.

$ cd ~
$ gpg --gen-key
$ gpg --export -a 'Name Surname (repo)' > DEB-GPG-KEY


2. Создаём файл ~/.rpmmacros следующего содержания:

%_signature gpg
%_gpg_path ~/.gnupg
%_gpg_name Name Surname (repo)


3. Создаём директорию repo, а в ней директории dists и pool. В них уже будет система каталогов. Переносим туда ключ DEB-GPG-KEY

$ mkdir -p repo/dists/nobody/soft/binary-i386
$ mkdir -p repo/dists/nobody/soft/binary-x86_64
$ mkdir -p repo/pool/soft/binary-i386/t/teamviewer
$ mkdir -p repo/pool/soft/binary-x86_64/t/teamviewer
$ mv DEB-GPG-KEY repo/DEB-GPG-KEY


4. В директории dists у нас будут храниться данные о пакетах, а в директории pool — сами пакеты. Причём из имени /binary-i386/t/teamviewer уже видно, что пакеты раскладываются по архитектурам, затем по буквенным директориям и затем по директориям с именами происходящими от названия содержащегося в них ПО (в них может лежать десяток пакетов необходимых конкретному ПО по его зависимостям). Т.е. имеется заданная иерархия.

5. Кладём в директорию repo скрипт для подготовки репозитория.
########
   

    #!/bin/sh
    
     # password for DEB-GPG-KEY
     key_pass="password"
    
    _soft1=soft/binary-i386
    _soft2=soft/binary-x86_64
    p_soft1=dists/nobody/soft/binary-i386/Packages
    p_soft2=dists/nobody/soft/binary-x86_64/Packages
    
    # i386
    dpkg-scanpackages -m pool/soft > $p_soft1
    cat $p_soft1 | gzip -9c > $p_soft1.gz
    cat $p_soft1 | bzip2 -9 > $p_soft1.bz2
    
    # x86_64
    dpkg-scanpackages -m pool/soft > $p_soft2
    cat $p_soft2 | gzip -9c > $p_soft2.gz
    cat $p_soft2 | bzip2 -9 > $p_soft2.bz2
    
    cd dists/nobody
    
    # Create the Repositary Release file
    
    cat > Release << END
    Origin: nobody
    Label: nobody repo
    Suite: nobody
    Codename: nobody
    Version: 1.0
    Architectures: i386
    Components: soft
    Description: nobody 1.0 repo
    MD5Sum:
    END
    
    # Create Relases
    
    cd $_soft1
    cat > Release << END
    Archive: nobody
    Version: 1.0
    Component: soft
    Origin: nobody
    Label: nobody packages
    Architecture: i386
    Description: nobody 1.0 repo
    END
    
    cd ../../$_soft2
    cat > Release << END
    Archive: nobody
    Version: 1.0
    Component: soft
    Origin: nobody
    Label: nobody packages
    Architecture: x86_64
    Description: nobody 1.0 repo
    END
    
    cd ../..
    
    # MD5Sum Calculate for all files
    
    # i386
    
    md5sum=$(md5sum "$_soft1/Packages" | cut -d ' ' -f1)
    sizeinbytes=$(ls -l "$_soft1/Packages" | cut -d ' ' -f5)
    printf " "$md5sum" %1d $_soft1/Packages" $sizeinbytes >> Release
    printf "\n" >> Release
    md5sum=$(md5sum "$_soft1/Packages.bz2" | cut -d ' ' -f1)
    sizeinbytes=$(ls -l "$_soft1/Packages.bz2" | cut -d ' ' -f5)
    printf " "$md5sum" %1d $_soft1/Packages.bz2" $sizeinbytes >> Release
    printf "\n" >> Release
    md5sum=$(md5sum "$_soft1/Packages.gz" | cut -d ' ' -f1)
    sizeinbytes=$(ls -l "$_soft1/Packages.gz" | cut -d ' ' -f5)
    printf " "$md5sum" %1d $_soft1/Packages.gz" $sizeinbytes >> Release
    printf "\n" >> Release
    md5sum=$(md5sum "$_soft1/Release" | cut -d ' ' -f1)
    sizeinbytes=$(ls -l "$_soft1/Release" | cut -d ' ' -f5)
    printf " "$md5sum" %1d $_soft1/Release" $sizeinbytes >> Release
    printf "\n" >> Release
    
    # x86_64
    
    md5sum=$(md5sum "$_soft2/Packages" | cut -d ' ' -f1)
    sizeinbytes=$(ls -l "$_soft2/Packages" | cut -d ' ' -f5)
    printf " "$md5sum" %1d $_soft2/Packages" $sizeinbytes >> Release
    printf "\n" >> Release
    
    md5sum=$(md5sum "$_soft2/Packages.bz2" | cut -d ' ' -f1)
    sizeinbytes=$(ls -l "$_soft2/Packages.bz2" | cut -d ' ' -f5)
    printf " "$md5sum" %1d $_soft2/Packages.bz2" $sizeinbytes >> Release
    printf "\n" >> Release
    
    md5sum=$(md5sum "$_soft2/Packages.gz" | cut -d ' ' -f1)
    sizeinbytes=$(ls -l "$_soft2/Packages.gz" | cut -d ' ' -f5)
    printf " "$md5sum" %1d $_soft2/Packages.gz" $sizeinbytes >> Release
    printf "\n" >> Release
    
    md5sum=$(md5sum "$_soft2/Release" | cut -d ' ' -f1)
    sizeinbytes=$(ls -l "$_soft2/Release" | cut -d ' ' -f5)
    printf " "$md5sum" %1d $_soft2/Release" $sizeinbytes >> Release
    printf "\n" >> Release
    
    # Signing all files
    
    printf "\n* Singning Repositary *\n"
    echo $key_pass | gpg --yes --no-use-agent --passphrase-fd 0 -bao Release.gpg Release
    
    printf "\n* Singning i386 *\n"
    cd $_soft1
    echo $key_pass | gpg --yes --no-use-agent --passphrase-fd 0 -bao Release.gpg Release
    
    printf "\n* Singning x86_64 *\n"
    cd ../../$_soft2
    echo $key_pass | gpg --yes --no-use-agent --passphrase-fd 0 -bao Release.gpg Release



 Меняем в первой строчке скрипта key_pass=«password» на пароль Вашего ключа.

6. Запускаем скрипт и ждём когда он отработает.

$ chmod a+x
$ ./repo_debian.sh


7. Закачиваем на хостинг директорию repo и описываем репозиторий в /etc/apt/sources.list

deb http://<IP-адрес>/repo nobody soft

если репозиторий будет храниться на флешке или DVD, то строка в sources.list будет отличаться:

deb file:///путь_к_каталогу/repo nobody soft


8. Проверяем работу репозитория

$ wget http://<IP-адрес>/repo/DEB-GPG-KEY
$ sudo apt-key add DEB-GPG-KEY
$ sudo apt-get clean
$ sudo apt-get update

В общем всё!

Оба скрипта можно скачать в архиве здесь.

Опубликовано: Константин, Автор/источник: - 13 Июнь 2013 22:45:08

Комментировать

Вы не залогинены! Регистрация

Афоризмы, мысли

Человечество погибнет от безмерия - от неумения остановиться!
И не важно в чём.

/Сакрюкин К.В./

Счётчик

Сейчас на сайте - 1 (0 зарег.)
Всего хитов8012 
Сегодня хитов8012 
Сегодня хостов1032 

Откуда гости наши?

 
Powered by ReloadCMS 1.5.0.
© 2004-2012 ReloadCMS Team
RSS AggregationPHP powered
Генерация страницы: 0.28
  Яндекс.Метрика
    Сакрюкин К.В.   Яндекс цитирования    
 
Здесь всё можно копировать и цитировать, но рабочая ссылка на мой сайт обязательна!