Как запихать пакет в локальный репозиторий?

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Аватара пользователя
жучара
Сообщения: 1096
ОС: астралинукс

Как запихать пакет в локальный репозиторий?

Сообщение жучара »

Друзья! Ну то есть надо создать локальный репозиторий, потом запихать в него пакет hello (для примера. Тестировалось на нескольких самопальных пакетах), потом обновить кэш (или что мы там обновляем) и чтобы он там в этом кэше оказался.

Подготовительные работы: система про пакет hello перед началом работы ничего знать не должна:

Shell

$ dpkg -l hello
dpkg-query: шаблону hello не соответствует ни один пакет
$
Источники пакетов такие:

Shell

$ cat /etc/apt/sources.list
deb [trusted=yes] file:///home/user/Desktop/testrepo mydebiantest main
$
Отсюда следует, что перед началом работы папки /home/user/Desktop/testrepo не должно быть. Это будет папка репозитория (создастся в дальнейшем)

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

Создадим репозиторий в папке /home/user/Desktop/testrepo. Вот скрипт. Там ничего сложного, используем команду reprepro. Файл /home/user/Desktop/testrepo/conf/distributions также без сюрпризов
создание репозитория
#!/bin/bash

sudo rm -rf /home/user/Desktop/testrepo
mkdir -p /home/user/Desktop/testrepo/conf

cat <<EOF > /home/user/Desktop/testrepo/conf/distributions
Codename: mydebiantest
Suite: stable
Version: 1.0
Origin: my_test_dist
Label: my_test_dist 1.0
Description: Debian Stable Repository
Architectures: amd64 source
Components: main
#SignWith: default
DebIndices: Packages Release . .gz .bz2
DscIndices: Sources Release . .gz .bz2
Contents: . .gz .bz2
EOF

reprepro -b /home/user/Desktop/testrepo export
reprepro -b /home/user/Desktop/testrepo createsymlinks
--------------------------------------------------------------

Теперь пакет hello. Штатный файл hello_2.10-3_amd64.deb не прикладывается (можете скачать со штатного репозитория. Команда apt-get download hello).

Запихиваем hello в репозиторий:

Shell

$ reprepro -b ~/Desktop/testrepo includedeb mydebiantest hello_2.10-3_amd64.deb
Exporting indices...
$
Обновляем кэш (аж два раза)
$ sudo rm -r /var/lib/apt/lists/*
$
$
$ sudo apt-get update
Пол:1 file:/home/user/Desktop/testrepo mydebiantest InRelease
Игн:1 file:/home/user/Desktop/testrepo mydebiantest InRelease
Пол:2 file:/home/user/Desktop/testrepo mydebiantest Release [2 718 B]
Пол:2 file:/home/user/Desktop/testrepo mydebiantest Release [2 718 B]
Пол:3 file:/home/user/Desktop/testrepo mydebiantest Release.gpg
Игн:3 file:/home/user/Desktop/testrepo mydebiantest Release.gpg
Пол:4 file:/home/user/Desktop/testrepo mydebiantest/main amd64 Packages [686 B]
Пол:5 file:/home/user/Desktop/testrepo mydebiantest/main amd64 Contents (deb) [333 B]
Ошб:4 file:/home/user/Desktop/testrepo mydebiantest/main amd64 Packages
Не удалось открыть файл /home/user/Desktop/testrepo/dists/mydebiantest/main/binary-amd64/Packages - open (13: Отказано в доступе)
Игн:5 file:/home/user/Desktop/testrepo mydebiantest/main amd64 Contents (deb)
Пол:4 file:/home/user/Desktop/testrepo mydebiantest/main amd64 Packages [627 B]
Игн:4 file:/home/user/Desktop/testrepo mydebiantest/main amd64 Packages
Пол:5 file:/home/user/Desktop/testrepo mydebiantest/main amd64 Contents (deb) [277 B]
Игн:5 file:/home/user/Desktop/testrepo mydebiantest/main amd64 Contents (deb)
Пол:4 file:/home/user/Desktop/testrepo mydebiantest/main amd64 Packages [982 B]
Пол:5 file:/home/user/Desktop/testrepo mydebiantest/main amd64 Contents (deb) [2 719 B]
Ошб:5 file:/home/user/Desktop/testrepo mydebiantest/main amd64 Contents (deb)
Не удалось открыть файл /var/lib/apt/lists/partial/_home_user_Desktop_testrepo_dists_mydebiantest_main_Contents-amd64 - open (13: Отказано в доступе)
Чтение списков пакетов… Готово
N: Загрузка выполняется от лица суперпользователя без ограничений песочницы, так как файл «/home/user/Desktop/testrepo/dists/mydebiantest/InRelease» недоступен для пользователя «_apt». - pkgAcquire::Run (13: Отказано в доступе)
E: Не удалось получить store:/var/lib/apt/lists/partial/_home_user_Desktop_testrepo_dists_mydebiantest_main_Contents-amd64 Не удалось открыть файл /var/lib/apt/lists/partial/_home_user_Desktop_testrepo_dists_mydebiantest_main_Contents-amd64 - open (13: Отказано в доступе)
E: Некоторые индексные файлы скачать не удалось. Они были проигнорированы, или вместо них были использованы старые версии.
$
$
$
$
$ sudo apt-get update
Пол:1 file:/home/user/Desktop/testrepo mydebiantest InRelease
Игн:1 file:/home/user/Desktop/testrepo mydebiantest InRelease
Пол:2 file:/home/user/Desktop/testrepo mydebiantest Release [2 718 B]
Пол:2 file:/home/user/Desktop/testrepo mydebiantest Release [2 718 B]
Пол:3 file:/home/user/Desktop/testrepo mydebiantest Release.gpg
Игн:3 file:/home/user/Desktop/testrepo mydebiantest Release.gpg
Пол:4 file:/home/user/Desktop/testrepo mydebiantest/main amd64 Packages [686 B]
Пол:5 file:/home/user/Desktop/testrepo mydebiantest/main amd64 Contents (deb) [333 B]
Ошб:4 file:/home/user/Desktop/testrepo mydebiantest/main amd64 Packages
Не удалось открыть файл /home/user/Desktop/testrepo/dists/mydebiantest/main/binary-amd64/Packages - open (13: Отказано в доступе)
Игн:5 file:/home/user/Desktop/testrepo mydebiantest/main amd64 Contents (deb)
Пол:4 file:/home/user/Desktop/testrepo mydebiantest/main amd64 Packages [627 B]
Игн:4 file:/home/user/Desktop/testrepo mydebiantest/main amd64 Packages
Пол:5 file:/home/user/Desktop/testrepo mydebiantest/main amd64 Contents (deb) [277 B]
Игн:5 file:/home/user/Desktop/testrepo mydebiantest/main amd64 Contents (deb)
Пол:4 file:/home/user/Desktop/testrepo mydebiantest/main amd64 Packages [982 B]
Пол:5 file:/home/user/Desktop/testrepo mydebiantest/main amd64 Contents (deb) [2 719 B]
Ошб:5 file:/home/user/Desktop/testrepo mydebiantest/main amd64 Contents (deb)
Не удалось открыть файл /var/lib/apt/lists/partial/_home_user_Desktop_testrepo_dists_mydebiantest_main_Contents-amd64 - open (13: Отказано в доступе)
Чтение списков пакетов… Готово
N: Загрузка выполняется от лица суперпользователя без ограничений песочницы, так как файл «/home/user/Desktop/testrepo/dists/mydebiantest/InRelease» недоступен для пользователя «_apt». - pkgAcquire::Run (13: Отказано в доступе)
E: Не удалось получить store:/var/lib/apt/lists/partial/_home_user_Desktop_testrepo_dists_mydebiantest_main_Contents-amd64 Не удалось открыть файл /var/lib/apt/lists/partial/_home_user_Desktop_testrepo_dists_mydebiantest_main_Contents-amd64 - open (13: Отказано в доступе)
E: Некоторые индексные файлы скачать не удалось. Они были проигнорированы, или вместо них были использованы старые версии.
$
Список пакетов смотрим:

Shell

$ grep ^Package: /var/lib/apt/lists/*Packages
grep: /var/lib/apt/lists/*Packages: Нет такого файла или каталога
$
Занавес.

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

Заметил, что если файл data.tar.xz архива hello_2.10-3_amd64.deb будет пустым, то всё получится. Проверим. Пересоберём hello_2.10-3_amd64.deb

Shell

$ ls
hello_2.10-3_amd64.deb
$
$ ar tv hello_2.10-3_amd64.deb
rw-r--r-- 0/0 4 Dec 26 20:30 2022 debian-binary
rw-r--r-- 0/0 1868 Dec 26 20:30 2022 control.tar.xz
rw-r--r-- 0/0 51020 Dec 26 20:30 2022 data.tar.xz
$
$ ar -x hello_2.10-3_amd64.deb
$
$ ls
control.tar.xz data.tar.xz debian-binary hello_2.10-3_amd64.deb
$
$ rm data.tar.xz hello_2.10-3_amd64.deb
$
$ tar cfJ data.tar.xz -T /dev/null
$
$ ls
control.tar.xz data.tar.xz debian-binary
$ fakeroot ar -qS hello_2.10-3_amd64.deb debian-binary control.tar.xz data.tar.xz
ar: создаётся hello_2.10-3_amd64.deb
$
Пересоздадим репозиторий (скрипт)
#!/bin/bash

sudo rm -rf /home/user/Desktop/testrepo
mkdir -p /home/user/Desktop/testrepo/conf

cat <<EOF > /home/user/Desktop/testrepo/conf/distributions
Codename: mydebiantest
Suite: stable
Version: 1.0
Origin: my_test_dist
Label: my_test_dist 1.0
Description: Debian Stable Repository
Architectures: amd64 source
Components: main
#SignWith: default
DebIndices: Packages Release . .gz .bz2
DscIndices: Sources Release . .gz .bz2
Contents: . .gz .bz2
EOF

reprepro -b /home/user/Desktop/testrepo export
reprepro -b /home/user/Desktop/testrepo createsymlinks
Запихиваем hello в репозиторий:

Shell

$ reprepro -b ~/Desktop/testrepo includedeb mydebiantest hello_2.10-3_amd64.deb
Exporting indices...
$
Обновляем кэш (аж два раза)
$ sudo rm -r /var/lib/apt/lists/*
$
$ sudo apt-get update
Пол:1 file:/home/user/Desktop/testrepo mydebiantest InRelease
Игн:1 file:/home/user/Desktop/testrepo mydebiantest InRelease
Пол:2 file:/home/user/Desktop/testrepo mydebiantest Release [2 703 B]
Пол:2 file:/home/user/Desktop/testrepo mydebiantest Release [2 703 B]
Пол:3 file:/home/user/Desktop/testrepo mydebiantest Release.gpg
Игн:3 file:/home/user/Desktop/testrepo mydebiantest Release.gpg
Пол:4 file:/home/user/Desktop/testrepo mydebiantest/main amd64 Packages [682 B]
Ошб:4 file:/home/user/Desktop/testrepo mydebiantest/main amd64 Packages
Не удалось открыть файл /home/user/Desktop/testrepo/dists/mydebiantest/main/binary-amd64/Packages - open (13: Отказано в доступе)
Пол:4 file:/home/user/Desktop/testrepo mydebiantest/main amd64 Packages [629 B]
Ошб:4 file:/home/user/Desktop/testrepo mydebiantest/main amd64 Packages
Не удалось открыть файл /home/user/Desktop/testrepo/dists/mydebiantest/main/binary-amd64/Packages - open (13: Отказано в доступе)
Пол:4 file:/home/user/Desktop/testrepo mydebiantest/main amd64 Packages [981 B]
Чтение списков пакетов… Готово
N: Загрузка выполняется от лица суперпользователя без ограничений песочницы, так как файл «/home/user/Desktop/testrepo/dists/mydebiantest/InRelease» недоступен для пользователя «_apt». - pkgAcquire::Run (13: Отказано в доступе)
$
$
$ sudo apt-get update
Пол:1 file:/home/user/Desktop/testrepo mydebiantest InRelease
Игн:1 file:/home/user/Desktop/testrepo mydebiantest InRelease
Пол:2 file:/home/user/Desktop/testrepo mydebiantest Release [2 703 B]
Пол:2 file:/home/user/Desktop/testrepo mydebiantest Release [2 703 B]
Пол:3 file:/home/user/Desktop/testrepo mydebiantest Release.gpg
Игн:3 file:/home/user/Desktop/testrepo mydebiantest Release.gpg
Чтение списков пакетов… Готово
N: Загрузка выполняется от лица суперпользователя без ограничений песочницы, так как файл «/home/user/Desktop/testrepo/dists/mydebiantest/InRelease» недоступен для пользователя «_apt». - pkgAcquire::Run (13: Отказано в доступе)
$
$
Список пакетов смотрим:

Shell

$ grep ^Package: /var/lib/apt/lists/*Packages
Package: hello
$
Теперь всё OK.

В общем, спасибо, кто откликнется. Debian 12.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21277
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как запихать пакет в локальный репозиторий?

Сообщение Bizdelnick »

А Вы более простые способы создания репозитория не рассматривали? reprepro, конечно, крутая штука, но очень уж сложная. Каждый раз, когда приходится с ней дело иметь, приходится на несколько часов зарываться в документацию.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1096
ОС: астралинукс

Re: Как запихать пакет в локальный репозиторий?

Сообщение жучара »

Bizdelnick писал:
19.08.2025 14:50
А Вы более простые способы создания репозитория не рассматривали? reprepro, конечно, крутая штука, но очень уж сложная. Каждый раз, когда приходится с ней дело иметь, приходится на несколько часов зарываться в документацию.
меня вот это смущает:

Shell

$ sudo apt-get update
...
Не удалось открыть файл /home/user/Desktop/testrepo/dists/mydebiantest/main/binary-amd64/Packages - open (13: Отказано в доступе)
...
$

Shell

$ ls -l /home/user/Desktop/testrepo/dists/mydebiantest/main/binary-amd64/Packages
-rw-r--r-- 1 root root 982 авг 20 21:57 /home/user/Desktop/testrepo/dists/mydebiantest/main/binary-amd64/Packages
$
смеяться некому
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21277
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как запихать пакет в локальный репозиторий?

Сообщение Bizdelnick »

Разрешения на все каталоги в пути проверьте.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1096
ОС: астралинукс

Re: Как запихать пакет в локальный репозиторий?

Сообщение жучара »

Bizdelnick писал:
20.08.2025 20:59
Разрешения на все каталоги в пути проверьте.
Да уж... Проблема решается, но вопросы новые возникают. Если создавать репозиторий в папке /home/user, то всё плохо, если в папке /user, то всё хорошо. (Работаем из под рута). Права на папки:

Shell

$ ls -ld /home/user
drwx------ 41 user user 4096 авг 21 09:20 /home/user
$
$ ls -ld /home
drwxr-xr-x 6 root root 4096 авг 21 09:10 /home
$
То есть получается права всему виной. Рут не имеет права в папку /home/user ни читать, ни писать, ни выполнять (хотя это и ложь, конечно, но к этому мы вернёмся) и из-за этого и получается проблема- пакеты не видятся.

А теперь ко лжи. Отлично всё рут и пишет, и видит и выполняет в папке /home/user. Но как доходит до действительно серьёзного дела- вылезает какое-то непонятное
Не удалось открыть файл /home/user/Desktop/testrepo/dists/mydebiantest/main/binary-amd64/Packages - open (13: Отказано в доступе)
и вспоминается- что да, каких-то прав не хватает видите ли

Ну то есть- до определённого момента всё нормально с правами рут- блин, да даже на этот же файл

/home/user/Desktop/testrepo/dists/mydebiantest/main/binary-amd64/Packages
- в него рут и запишет и прочтёт и удалит и чё угодно сделает.

Shell

$ ls -l /home/user/testrepo/dists/mydebiantest/main/binary-amd64/Packages
-rw-r--r-- 1 root root 982 авг 21 10:10 /home/user/testrepo/dists/mydebiantest/main/binary-amd64/Packages
$
Вот даже что-нибудь в него записать можно рутом:

Shell

$ echo cafebabe | sudo tee /home/user/testrepo/dists/mydebiantest/main/binary-amd64/Packages > /dev/null
$ cat /home/user/testrepo/dists/mydebiantest/main/binary-amd64/Packages
cafebabe
$
Но при работе вылезает эта фигня с правами. Почему- непонятно. То ли оно просто для порядка их проверяет (то есть чисто номинально), хз.
Offtopic
...Коль скоро работаем из-под рута, теперь скрипт для создания репозитория и добавления пакета hello выглядит так:
создание репозитория
#!/bin/bash

sudo rm -rf $1/testrepo
sudo mkdir -p $1/testrepo/conf

cat <<EOF > distributions
Codename: mydebiantest
Suite: stable
Version: 1.0
Origin: my_test_dist
Label: my_test_dist 1.0
Description: Debian Stable Repository
Architectures: amd64 source
Components: main
#SignWith: no
DebIndices: Packages Release . .gz .bz2
DscIndices: Sources Release . .gz .bz2
Contents: . .gz .bz2
EOF

sudo cp distributions $1/testrepo/conf/distributions

sudo reprepro -b $1/testrepo export
sudo reprepro -b $1/testrepo createsymlinks

sudo reprepro -b $1/testrepo includedeb mydebiantest hello_2.10-3_amd64.deb
Запускать: ./foo.sh /home/user или ./foo.sh /home То есть параметр- имя папки, где будет создаваться репозиторий.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21277
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как запихать пакет в локальный репозиторий?

Сообщение Bizdelnick »

Опять Вам, бедному-несчастному, все лгут? Ну поведайте, кто же столь коварно Вас обманул и сказал, что пакеты из репозитория затягиваются под пользователем root.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1096
ОС: астралинукс

Re: Как запихать пакет в локальный репозиторий?

Сообщение жучара »

Bizdelnick писал:
21.08.2025 08:52
Опять Вам, бедному-несчастному, все лгут? Ну поведайте, кто же столь коварно Вас обманул и сказал, что пакеты из репозитория затягиваются под пользователем root.
вы меня с кем-то путаете. Я всегда скачиваю пакеты простым пользователем.
Я просто читаю маны.
Спасибо сказали: