Создание локального репозитария ALTLinux

Операционки на базе Unix
Post Reply
User avatar
ИМХО
Бытовой хакер
Бытовой хакер
Posts: 975
Joined: 02 Mar 2010, 13:21
ОС: Maui 2
Location: Чолпон-Ата
Contact:

Создание локального репозитария ALTLinux

Post by ИМХО » 26 Jun 2010, 11:19

Создание локального репозитория

http://www.altlinux.org/Apt/IsoFromRepository

Для создания репозитория достаточно создать правильную структуру директорий, разместить в ней rpm-пакеты и создать метаинформацию для APT.

Структура APT-RPM репозитория
APT-RPM репозиторий выглядит достаточно просто:

Code: Select all

i586/
    base/ # метаинформация
        release
        pkglist.reponame.bz2
        ...
    RPMS.reponame/ # пакеты архитектуры i586
        foobar-1.2-5.i586.rpm
x86_64/
    base/ # метаинформация
        release
        pkglist.reponame.bz2
    RPMS.reponame/ # пакеты архитектуры x86_64
        foobar-1.2-5.x86_64.rpm
noarch/
    base/ # метаинформация
        release
        pkglist.reponame.bz2
    RPMS.reponame/ # архитектурно-независимые пакеты
        foobar-doc-1.2-5.noarch.rpm</pre>
Такая структура формирует три источника для APT (<base directory> - место, где располагается репозиторий):

Code: Select all

rpm file:<base directory> i586 reponame
rpm file:<base directory> x86_64 reponame
rpm file:<base directory> noarch reponame
NB: указываем noarch и один из архитектурно-зависимых репозиториев, всё в кучу не надо!
Более изощрённую структуру директорий, когда в репозитории хранятся пакеты с иходным текстом (.src.rpm), общие для нескольких архитектур, а также когда в репозитории имеется несколько компонентов (в данном репозитории компонент один - reponame), можно посмотреть, к примеру, в репозитории ALT Linux Server. Обратите внимание, что в этом репозитории используется отдельная директория files для хранения всех пакетов, и директории RPMS.*/SRPMS.* являются символическими ссылками на поддиректории из files.

Размещение пакетов

Просто разложите пакеты по директориям {i586,i686,x86_64,noarch}/RPMS.reponame в зависимости от архитектуры пакета.
Создание/обновление метаинформации

Для создания/обновления метаинформации (файлов, хранящихся в директории base), используйте утилиту genbasedir из пакета apt-repo-tools (до 5.0/branch включительно -- apt-utils):

Code: Select all

#!/bin/sh
REPO_DIR="$1"
REPO_NAME="$2"
 
for arch in i586 i686 x86_64 noarch; do
  genbasedir --bloat --progress --topdir=$REPO_DIR $arch $REPO_NAME
done
Полезные советы

Создание «скелета» репозитория

Code: Select all

#!/bin/sh
REPO_DIR="$1"
REPO_NAME="$2"
for i in i586 i686 x86_64 noarch; do
  mkdir -p "$REPO_DIR/$i/base" "$REPO_DIR/$i/RPMS.$REPO_NAME"
done
Добавление произвольного набора пакетов в репозиторий
Перед запуском этого скрипта, возможно нужно будет установить недостающие пакеты:

Code: Select all

apt-get install /usr/bin/packages
Вот скрипт для добавления пакетов: Файл:Addpackages.sh

После этой операции необходимо обновить метаинформацию. Побочным эффектом является приведение имён файлов с пакетами к «каноническому» виду.
Создание репозитория на основе содержимого кэша APT
Добавьте содержимое кэша APT в репозиторий (см. выше) и обновите метаинформацию (см. выше).
втоматизация добавления пакетов в репозиторий
Воспользуйтесь скриптами из пакета sisyphus.
Last edited by ИМХО on 26 Jun 2010, 11:51, edited 2 times in total.
User avatar
ИМХО
Бытовой хакер
Бытовой хакер
Posts: 975
Joined: 02 Mar 2010, 13:21
ОС: Maui 2
Location: Чолпон-Ата
Contact:

Re: APT в ALT Linux/CreateRepository

Post by ИМХО » 26 Jun 2010, 11:28

Запись репозитория на CD/DVD

Структура диска с репозиторием, который можно подключить с помощью команды apt-cdrom, достаточно проста:

Code: Select all

.disk/
    info <- файл с информацией о диске.
ALTLinux/ <- репозиторий
    base/
    RPMS...
    SRPMS...
Канонический вариант создания таких дисков - утилита distribute из одноимённого пакета (см. документацию).
Для простых случаев можно использовать нижеприведённый скрипт, который создаёт iso-файл из локального репозитория (изначально предназначался для создания образов репозиториев updates и backports, и поэтому может требовать небольшого приложения напильника в других случаях).
Внимание: этот скрипт не умеет разбивать репозиторий на несколько CD/DVD-образов!
updates2iso.sh

Code: Select all

#!/bin/sh
## Create apt-getable ISO image
## from ALT Linux updates/backports mirror
## Artem Zolochevskiy <az@zolochevskie.net>, 2006

PUBLISHER=""

### ---------------------------------- ###
### --  don't edit below this line  -- ###
### ---------------------------------- ###
PROG="$(basename $0)"
VERSION="0.1"

usage() {
	echo "usage: $PROG /path/to/mirror/"
}

# check arguments
if [ $# = 0 ]
then
	usage
	exit 1
fi

for arg in $*; do
    case $arg in
        --version|-V|-v)
	    echo "$PROG $VERSION"
	    exit 0
	    ;;
	--help|-h)
            usage
	    exit 0
	    ;;
	-*)
	    echo "$PROG: $arg: unknown option" >&2
	    exit 1
    esac
done


# check path to updates mirror
if [ ! -f $1/i586/base/release ]
then
	echo "$PROG: no release file found. wrong path to updates/backports mirror?" >&2
	exit 1
fi

# updates or backports
if grep -s -q  "^Description: Not Available" $1/i586/base/release
then
	DESCRIPTION="ALT Linux $(basename $1) backports"
else
	DESCRIPTION="$(grep ^Description: $1/i586/base/release | sed 's/^Description: //')"
fi

# some vars
DATE="$(grep ^Date: $1/i586/base/release | cut -d" " -f3,4,5 | tr " " .)"
DESCRIPRION_PLUS_DATE="$DESCRIPTION ($DATE)"
ISO_IMAGE="$(echo "$DESCRIPTION-$DATE.iso" | tr [:upper:] [:lower:] | tr " " _)"


# display what we are going to do
echo " >>>"
echo " >>> creating \"$DESCRIPRION_PLUS_DATE\" iso"
echo " >>>"

# create temporary .disk/info and README.txt files
TMP_DIR="$(mktemp -d)"
mkdir $TMP_DIR/.disk/

cat <<EOF >$TMP_DIR/.disk/info
$DESCRIPRION_PLUS_DATE
EOF

cat <<EOF >$TMP_DIR/README.txt
$DESCRIPRION_PLUS_DATE
To add this disk do as root:
apt-cdrom add
EOF

# set publisher and preparer for mkisofs
if [ -z "$PUBLISHER" ]
then
	PUBLISHER="$(whoami)"
fi
PREPARER="$PUBLISHER"

# create iso image
makeiso() {
	mkisofs -J -r -volid "$DESCRIPTION" \
	--publisher $PUBLISHER \
	--preparer $PREPARER \
	--iso-level=4 --joliet-long \
	-o $ISO_IMAGE \
	$TMP_DIR \
	$1
}

# display result
if makeiso $1
then
	rm -r -f $TMP_DIR
	echo " >>>"
	echo " >>> \"$DESCRIPRION_PLUS_DATE\" ISO gotov!"
	echo " >>> file: $ISO_IMAGE"
	echo " >>>"
else
	rm -r -f $TMP_DIR
	echo "$PROG: creating \"$DESCRIPRION_PLUS_DATE\" ISO failed!"
	exit 1
fi

exit 0
Применять так: updates2iso.sh /путь/к/зеркалу/
User avatar
ИМХО
Бытовой хакер
Бытовой хакер
Posts: 975
Joined: 02 Mar 2010, 13:21
ОС: Maui 2
Location: Чолпон-Ата
Contact:

Re: APT в ALT Linux/CreateRepository

Post by ИМХО » 26 Jun 2010, 11:30

Как создать локальный репозиторий для программы Synaptic

Для создания локального репозитория на жестком диске, нам еобходим пакет apt-utils. Скачеваем его а официального сайта компании Альт Линукс и устанавливаем командой rpm -ivh apt-utils*.rpm.

Шаг 1 - Создаем папку для локального репозитория. Например /var/LocRep/i586/RPMS.classic

Две последние папки обязательно должны иметь вид как на фтп-репозиториях в интернете.

Шаг 2- Папки с закаченными Sinaptic-ом пакетами храняться в:
/var/cache/apt/archives/*.rpm

Шаг 3 - Устанавливаем пакет apt-utils командой: rpm -ivh apt-utils*.rpm

Шаг 4 — Копируем необходимые нам пакеты в созланную папку /var/LocRep/i586/RPMS.classic

Шаг 5 - Открываем терминал и вводим следующую команду:
genbasedir --progress --create –topdir=/var/LocRep/ i586 classic

Если мы хотим создать репозиторий для пакетов noarch архитектуры, то соответственно создаем папку вида:

Code: Select all

/home/shared/LocRep/noarch/RPMS.classic
и вводим следующую команду:

Code: Select all

genbasedir --progress --create --topdir=/home/shared/LocRep/ noarch classic
Так-же мы можем вручную добавить наш локальный репозиторий, лишь отредактировав один файл: /etc/apt/sources.list

Code: Select all

cat > /etc/apt/sources.list
rpm file:///home/shared/LocRep/ i586 classic
ctrl + c            
- Команда cat перезапишет файл оставив там лишь строчку . Затем мы закрываем работу утилиты «cat» сочетанием клавиш ctrl + c
Last edited by ИМХО on 26 Jun 2010, 12:47, edited 1 time in total.
User avatar
ИМХО
Бытовой хакер
Бытовой хакер
Posts: 975
Joined: 02 Mar 2010, 13:21
ОС: Maui 2
Location: Чолпон-Ата
Contact:

Re: APT в ALT Linux/CreateRepository

Post by ИМХО » 26 Jun 2010, 11:32

Локальный репозиторий от Моцьо Генадия aka Drool



1. Делаем папку /usr/src своей, для чего от рута запустить mc, стать на нужную папку, меню File – chOwn, там выбрать юзера и группу свои (они обычно в самом низу списка)
2. Скидываем ВСЕ rpm-ки в одну папку, например в

Code: Select all

/mnt/windows/Install/Linux/Local/
3. Вручную ставим пакет apt-utils (можно просто зайти в него mc как в архив и нажать на скрипт INSTALL)
4. Создаем папку для возможных обновлений

Code: Select all

/mnt/windows/Install/Linux/Update/
5. От юзера(!) создаем в папке /usr/src папку rep, а в ней папку local, а там i586, в которой создаем папку base и символическую ссылку на папку с rpm-ками:

Code: Select all

ln -s /mnt/windows/Install/Linux/Local/ RPMS.local
6. От юзера(!) создаем в папке /usr/src/rep папку update, а там i586, в которой создаем папку base и символическую ссылку на папку с возможными rpm-ками обновлений:

Code: Select all

ln -s /mnt/windows/Install/Linux/Update/ RPMS.update
7. От юзера(!) создаем индексные файлы:

Code: Select all

genbasedir –topdir=/usr/src/rep/local i586 local
genbasedir –topdir=/usr/src/rep/update i586 update
8. От рута редактируем файл

Code: Select all

/etc/apt/sources.list
в котором должны быть только две незаремленных строки:

Code: Select all

rpm file:/usr/src/rep/local/ i586 local
rpm file:/usr/src/rep/update i586 update
9. От рута делаем

Code: Select all

apt-get update
apt-get install synaptic-usermode kde-i18n-ru kdebase-kdm и все что они за собой потянут
10. Говорим машине

Code: Select all

reboot
11. Получаем удовольствие

Все дальнейшие rpm-ки слаживать не куда попало, а в /mnt/windows/Install/Linux/Update/, после чего нужно всегда выполнять команду “genbasedir –topdir=/usr/src/rep/update i586 update”, для чего имеет смысл сделать готовый скрипт или ярлык на рабочем столе (в свойствах ярлыка установить галочку “запускать в терминале”), и в синаптике жать кнопочку “Получить сведения” или в консоли от рута apt-get update.
Last edited by ИМХО on 26 Jun 2010, 11:45, edited 2 times in total.
User avatar
ИМХО
Бытовой хакер
Бытовой хакер
Posts: 975
Joined: 02 Mar 2010, 13:21
ОС: Maui 2
Location: Чолпон-Ата
Contact:

Re: APT в ALT Linux/CreateRepository

Post by ИМХО » 26 Jun 2010, 11:37

Локальный репозиторий от Моцьо Генадий aka Drool
если есть возможность - сильно советую делать локальное зеркало своего бранча.

Code: Select all

#!/bin/sh

rsync -avlpztc --exclude 'SRPMS' --exclude 'x86_64'  --stats --delete-after --verbose rsync.altlinux.org::ALTLinux/4.0/branch/ /var/ftp/pub/branch
# rsync --bwlimit=13 -avlpztc --exclude 'SRPMS' --exclude 'x86_64'  --stats --delete-after --verbose rsync.altlinux.org::ALTLinux/4.0/branch/ /var/ftp/pub/branch
Зеркало ложится в /var/ftp/pub/branch, но можно и поменять. В скрипте отключено зеркалирование SRPM и x86_64. Тоже все можно поменять.
User avatar
Gen1us2k
Модератор
Модератор
Posts: 771
Joined: 02 Mar 2010, 16:13

Re: Создание локального репозитария ALTLinux

Post by Gen1us2k » 27 Jun 2010, 22:56

сделать?
сделаю, как хард куплю%)
Image
Home: Windows Heaven
Home: Debian 6
For Servers: Debian || RHEL Based || Gentoo || FreeBSD
User avatar
Raven
Бородатый сис
Бородатый сис
Posts: 2791
Joined: 03 Mar 2010, 15:12
ОС: RHEL 8
Location: Из серверной

Re: Создание локального репозитария ALTLinux

Post by Raven » 28 Jun 2010, 09:32

ИМХО
*ZHEST* *AHTUNG*
Я не злопамятный, я просто часто ковыряю логи
User avatar
ИМХО
Бытовой хакер
Бытовой хакер
Posts: 975
Joined: 02 Mar 2010, 13:21
ОС: Maui 2
Location: Чолпон-Ата
Contact:

Re: Создание локального репозитария ALTLinux

Post by ИМХО » 28 Jun 2010, 09:37

*ADOLF* *MONAH*
User avatar
Raven
Бородатый сис
Бородатый сис
Posts: 2791
Joined: 03 Mar 2010, 15:12
ОС: RHEL 8
Location: Из серверной

Re: Создание локального репозитария ALTLinux

Post by Raven » 28 Jun 2010, 10:18

*COOL*
Я не злопамятный, я просто часто ковыряю логи
Post Reply