Jak utworzyć lokalne repozytorium APT?

93

Chciałbym zbudować własne lokalne repozytorium w mojej sieci LAN, aby maszyny w sieci LAN mogły je aktualizować i aktualizować. Chcę pobrać pakiety i zapisać je na moim lokalnym serwerze, aby móc je aktualizować, aktualizować, instalować itp. Bez korzystania z Internetu.

    
zadawane grooveplex 31.07.2012, 11:15
źródło

10 odpowiedzi

39

* Tworzenie repozytorium offline przez LAN *

Instalowanie lokalnego serwera WWW Apache

# apt-get install apache2

Domyślnie, pakiet Apache Debiana skonfiguruje witrynę w /var/www w twoim systemie. Dla naszych celów jest to w porządku, więc nie ma powodu, aby robić coś więcej. Możesz go łatwo przetestować, wskazując ulubioną przeglądarkę na http://localhost Powinieneś zobaczyć domyślną stronę internetową po instalacji, która jest faktycznie przechowywana w /var/www/index.html


Utwórz katalog repozytorium pakietów Debiana

wybrał utworzenie katalogu /var/www/debs dla tego. Pod nim należy utworzyć katalogi "architektura", po jednym dla każdej architektury, którą trzeba obsługiwać. Jeśli używasz tylko jednego komputera (lub komputera), potrzebujesz tylko jednego - zazwyczaj "i386" dla systemów 32-bitowych lub "amd64" dla 64-bitowych. Jeśli używasz innej architektury, zakładam, że prawdopodobnie już wiesz o tym. Teraz po prostu skopiuj pliki pakietów ".deb" dla danej architektury do odpowiednich katalogów. Jeśli teraz wskażesz ulubioną przeglądarkę na http://localhost/debs/amd64 (na przykład) zobaczysz listę pakietów dla systemów 64-bitowych.


Utwórz plik Packages.gz

Teraz musimy utworzyć plik katalogu do użycia APT. Odbywa się to za pomocą narzędzia o nazwie "dpkg-scanpackages". Oto polecenia, których używam do aktualizacji pakietów AMD64 w mojej sieci LAN:

# cd /var/www/debs/

# dpkg-scanpackages amd64 | gzip -9c > amd64/Packages.gz




Prześlij repozytorium do APT

Teraz pozostaje tylko przekazanie APT informacji o twoim repozytorium. Robisz to, aktualizując swój plik /etc/apt/sources.list. Będziesz potrzebować takiego wpisu:

  

deb http://localhost/debs/ amd64/

Użyłem rzeczywistej nazwy hosta mojego systemu zamiast localhost - w ten sposób kod jest taki sam dla wszystkich komputerów w mojej sieci LAN, ale localhost będzie dobrze, jeśli używasz tylko jednego komputera.
Teraz zaktualizuj APT:

# apt-get update
    
odpowiedział user61928 05.09.2012, 14:43
źródło
74

Z wiki Pomocy Ubuntu :

  

Istnieją cztery kroki do skonfigurowania prostego repozytorium dla siebie

     

1.Instaluj dpkg-dev
     2. Umieść pakiety w katalogu
     3. Stwórz skrypt, który skanuje pakiety i utwórz plik      4. Dodaj linię do źródła.list wskazując na swoje repozytorium

     

Zainstaluj dpkg-dev

     

Wpisz terminal

sudo apt-get install dpkg-dev
     

Katalog

     

Utwórz katalog, w którym będziesz przechowywać swoje pakiety. Dla tego   na przykład użyjemy /usr/local/mydebs.

sudo mkdir -p /usr/local/mydebs
     

Teraz przenieś swoje paczki do katalogu, który właśnie utworzyłeś.

     

Poprzednio pobrane pakiety są zazwyczaj przechowywane w systemie   katalog /var/cache/apt/archives . Jeśli masz zainstalowany   apt-cacher będziesz mieć dodatkowe pakiety przechowywane w jego / pakietach   katalog.

     

Aktualizacja skryptu - mydebs

     

To prosta trójlinerka:

#! /bin/bash
 cd /usr/local/mydebs
 dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
     

Wytnij i wklej powyższe dane do gedit i zapisz jako aktualizację-mydebs   ~ / bin. (tylda "~" oznacza twój katalog domowy, jeśli ~ / bin nie   istnieje, utwórz go: Ubuntu umieści ten katalog w twojej PATH. To jest   dobre miejsce do umieszczania osobistych skryptów). Następnie, wykonaj skrypt wykonywalny:

chmod u+x ~/bin/update-mydebs

How the script works:
     

dpkg-scanpackages sprawdza wszystkie pakiety w mydebs, a dane wyjściowe są kompresowane i zapisywane do pliku (Packages.gz), który apt-get   aktualizacja może zostać odczytana (poniżej znajduje się odwołanie, które wyjaśnia to w   rozdzierający szczegół). / dev / null jest pustym plikiem; to jest substytut   dla pliku przesłaniania zawierającego pewne dodatkowe informacje o pliku   pakiety, które w tym przypadku nie są naprawdę potrzebne. Zobacz deb-override (5)   jeśli chcesz się o tym dowiedzieć.

     

Sources.list

     

dodaj linię

deb file:/usr/local/mydebs ./
     

do twojego /etc/apt/sources.list i gotowe.

     

Opcja CD

     

Możesz wypalić katalog zawierający deb na CD i użyć go jako   również repozytorium (dobre do dzielenia się między komputerami). Aby użyć   CD jako repozytorium, po prostu uruchom

sudo apt-cdrom add
     

Używanie repozytorium

     

Gdy umieścisz nowy deb w katalogu mydebs, uruchom

sudo update-mydebs
sudo apt-get update
     

Teraz twoje lokalne pakiety mogą być manipulowane za pomocą Synaptic, aptitude i   komendy apt: apt-get, apt-cache, itp. Podczas próby apt-get   zainstalować, wszelkie zależności zostaną rozwiązane dla ciebie, tak długo jak oni   można spełnić.

     

Źle wykonane pakiety prawdopodobnie zawiodą, ale nie przetrwasz   piekło dpkg.

    
odpowiedział BigSack 16.08.2012, 13:45
źródło
13

Tworzenie repozytorium uwierzytelnionego

Spojrzałem na odpowiedzi tutaj i na innych stronach, a większość ma (wielką) IMHO wadę, że konfigurujesz nieuwierzytelnione repozytorium. Oznacza to, że musisz uruchomić apt-get z --allow-unauthenticated , aby zainstalować z niego pakiety. Może to stanowić zagrożenie dla bezpieczeństwa, szczególnie w skryptach, w których instalowane pakiety mogą nie pochodzić z lokalnego repozytorium.

Zauważ, że nie omówiłem tutaj, jak udostępnić je w sieci LAN, ale to dość ogólna konfiguracja za pomocą Apache lub nginx (zobacz inne odpowiedzi tutaj).

Skonfiguruj katalog repo

mkdir /home/srv/packages/local-xenial
cd /home/srv/packages/local-xenial

Następnie dodaj taką linię do sources.list :

deb file:/home/srv/packages/local-xenial/ ./

Dodawanie i usuwanie pakietów

usunięcie pakietów

rm /home/srv/packages/local-xenial/some_package_idont_like

dodaj pakiety

cp /some/dir/apackage.deb /home/srv/packages/local-xenial

uruchom teraz następujący skrypt, który generuje pliki Packages, Release i InRelease i podpisuje je kluczem prywatnym gpg:

#!/bin/bash

if [ -z "$1" ]; then
       echo -e "usage: 'basename $0' DISTRO
where DISTRO is the Ubuntu version codename (e.g. 14.04 is trusty)\n
The way to use this script is to do the changes to the repo first, i.e. delete or copy in the .deb file to /srv/packages/local-DISTRO, and then run this script\n
This script can be run as an unprivileged user - root is not needed so long as your user can write to the local repository directory"
else
    cd /srv/packages/local-"$1"

    # Generate the Packages file
    dpkg-scanpackages . /dev/null > Packages
    gzip --keep --force -9 Packages

    # Generate the Release file
    cat conf/distributions > Release
    # The Date: field has the same format as the Debian package changelog entries,
    # that is, RFC 2822 with time zone +0000
    echo -e "Date: 'LANG=C date -Ru'" >> Release
    # Release must contain MD5 sums of all repository files (in a simple repo just the Packages and Packages.gz files)
    echo -e 'MD5Sum:' >> Release
    printf ' '$(md5sum Packages.gz | cut --delimiter=' ' --fields=1)' %16d Packages.gz' $(wc --bytes Packages.gz | cut --delimiter=' ' --fields=1) >> Release
    printf '\n '$(md5sum Packages | cut --delimiter=' ' --fields=1)' %16d Packages' $(wc --bytes Packages | cut --delimiter=' ' --fields=1) >> Release
    # Release must contain SHA256 sums of all repository files (in a simple repo just the Packages and Packages.gz files)
    echo -e '\nSHA256:' >> Release
    printf ' '$(sha256sum Packages.gz | cut --delimiter=' ' --fields=1)' %16d Packages.gz' $(wc --bytes Packages.gz | cut --delimiter=' ' --fields=1) >> Release
    printf '\n '$(sha256sum Packages | cut --delimiter=' ' --fields=1)' %16d Packages' $(wc --bytes Packages | cut --delimiter=' ' --fields=1) >> Release

    # Clearsign the Release file (that is, sign it without encrypting it)
    gpg --clearsign --digest-algo SHA512 --local-user $USER -o InRelease Release
    # Release.gpg only need for older apt versions
    # gpg -abs --digest-algo SHA512 --local-user $USER -o Release.gpg Release

    # Get apt to see the changes
    sudo apt-get update
fi

Przykład Zawartość pliku conf / distribution

Origin: My_Local_Repo Label: My_Local_Repo Codename: xenial Architectures: i386 amd64 Components: main Description: My local APT repository SignWith: 12345ABC

Linki

link

link

link

    
odpowiedział happyskeptic 15.05.2016, 09:33
źródło
7

Możesz także skonfigurować lokalny serwer źródłowy przez nginx i reprezent:

  1. Zainstaluj pakiety debianowe

    sudo apt-get install reprepro nginx 
    
  2. twórz katalogi dla przedstawicieli i edytuj je

    sudo mkdir -p /srv/reprepro/ubuntu/{conf,dists,incoming,indices,logs,pool,project,tmp}
    
    $ cd /srv/reprepro/ubuntu/
    $ sudo chown -R 'whoami' . # changes the repository owner to the current user
    

    / srv / reprepro / ubuntu / conf / distributions

    Origin: Your Name
    Label: Your repository name
    Codename: karmic
    Architectures: i386 amd64 source
    Components: main
    Description: Description of repository you are creating
    SignWith: YOUR-KEY-ID
    

    / srv / reprepro / ubuntu / conf / options

    ask-passphrase
    basedir .
    
  3. Dołącz to do przedstawiciela, skompiluj go

    $ reprepro includedeb karmic /path/to/my-package_0.1-1.deb \
    # change /path/to/my-package_0.1-1.deb to the path to your package
    
  4. Config nginx:

    /etc/nginx/sites-available/vhost-packages.conf

    server {
      listen 80;
      server_name packages.internal;
    
      access_log /var/log/nginx/packages-access.log;
      error_log /var/log/nginx/packages-error.log;
    
      location / {
        root /srv/reprepro;
        index index.html;
      }
    
      location ~ /(.*)/conf {
        deny all;
      }
    
      location ~ /(.*)/db {
        deny all;
      }
    }
    
  5. Zoptymalizuj rozmiar wiadra:

    /etc/nginx/conf.d/server_names_hash_bucket_size.conf

    server_names_hash_bucket_size 64;
    

Odniesienie do Link do przewodnika instalacji

    
odpowiedział elprup 03.07.2013, 11:18
źródło
5

Możesz rzucić okiem na apt-mirror i apt-cacher .

Oto przewodnik na temat jak zainstalować i użyj go.

    
odpowiedział con-f-use 31.07.2012, 13:02
źródło
4
  

Istnieje kilka powodów, dla których warto utworzyć lokalne repozytorium.   Po pierwsze, chcesz zaoszczędzić na przepustowości, jeśli masz wiele   Maszyny z systemem Ubuntu do aktualizacji. Na przykład, jeśli masz 25 komputerów Ubuntu   że wszystko, co potrzebne do aktualizacji co najmniej raz w tygodniu, będzie znacznie   oszczędzaj przepustowość, ponieważ możesz zrobić wszystko poza repozytorium lokalnie.

     

Większość organizacji ma przyzwoitą przepustowość dla swoich bram sieciowych   ale ta przepustowość jest cennym towarem, który musi zostać wykorzystany   mądrze.

     

Wiele organizacji nadal ma routery z limitami 10 MB lub 100 MB na serwerze   ale wewnętrznie 1 GB połączeń sieciowych, więc przepustowość może być   lepiej wykorzystane wewnętrznie. Drugi powód tworzenia własnego   repozytorium to to, że możesz kontrolować, które aplikacje są ładowane   Twoje wewnętrzne maszyny Ubuntu.

     

Możesz usunąć wszystkie aplikacje, których organizacja nie chce używać   w sieci lokalnej z repozytorium, które aktualizuje komputery.   Co więcej, możesz utworzyć pole testowe i przetestować aplikacje i   wersje, zanim pozwolisz im na wdrożenie do twojej sieci   bezpieczeństwo i stabilność.

     

Najpierw musisz ustawić lustro, aby to zrobić. Wystarczy nacisnąć    Ctrl + Alt + T na klawiaturze, aby otworzyć   Terminal. Kiedy się otworzy, uruchom poniższe polecenie.

apt-get install apt-mirror 
     

Po skonfigurowaniu apt-mirror możesz rozpocząć pobieranie   repozytorium za pomocą tego polecenia.

     

apt-mirror /etc/apt/mirror.list1

Czytaj dalej

1 Źródło: Utwórz repozytorium Ubuntu

    
odpowiedział Mitch 17.08.2012, 00:29
źródło
3

Aby utworzyć lokalne repozytorium offline
1. Zrób dostęp do katalogu (przynajmniej po root)

  

sudo mkdir / var / my-local-repo

  1. skopiuj wszystkie pliki deb do tego katalogu.
  2. skanuj katalog
  

sudo dpkg-scanpackages / var / my-local-repo / dev / null >   / var / my-local-repo / Packages

  1. dodaj lokalne repozytorium do źródeł
  

echo "plik deb: / var / my-local-repo ./" > /tmp/my-local.list

     

sudo mv /tmp/my-local.list /etc/apt/sources.list.d/my-local.list

     

sudo apt-get update

    
odpowiedział user61928 05.09.2012, 14:32
źródło
1

Próbowałem użyć apt-rdepends jak w wybranej odpowiedzi, ale kiedy próbowałem zainstalować pakiet z mojego lokalnego repozytorium, skarżyło się na brakujące zależności.

apt-rdepends nie zawierało niektórych zależności dla mojego pakietu. Podejrzewam, że ma to coś wspólnego z tym, że apt-cache show pokazuje dla niego wiele rekordów.

Zamiast tego użyłem apt-cache depends i to wystarczyło:

Uzyskiwanie rekurencyjnej listy zależności

apt-cache depends <packagename> -i --recurse

-i : tylko ważne zależności --recurse : rekursywna

Zamień go na strawną listę

  • Usuwanie symboli i amp; spacje: | tr -d "|,<,>, "
  • Usuwanie zależności: & amp; PreDepends: | sed -e 's/^Depends://g' | sed -e 's/^PreDepends://g'
  • Sortowanie listy: | sort
  • Tylko niepowtarzalne wartości: | uniq > list.txt

Zakończ polecenie:

apt-cache depends <packagename> -i --recurse | tr -d "|,<,>, " | sed -e \
's/^Depends://g' | sed -e 's/^PreDepends://g' | sort | uniq > list.txt

Pobierz pakiety

for i in $( cat list.txt ); do apt-get download $i; done;

Zeskanuj pakiety i zmień je w Packages.gz

dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
    
odpowiedział Simon 08.06.2016, 15:55
źródło
1

Instrukcje w odpowiedzi BigSack powyżej - i oryginalny wpis na wiki , który cytował - nie działał dla mnie, dopóki nie wprowadziłem dwóch zmian:


1) Wygenerowałem płaski plik "Pakiety" zamiast wersji gzip:

  

dpkg-scanpackages -m. > Pakiety


2) Dodałem [trusted=yes] do wpisu repo w sources.list,

  

deb [trusted = yes] file: / usr / local / mydebs ./


Podejrzewam, że # 2 to po prostu kwestia nieaktualności wiki Ubuntu. Nie wiem, dlaczego numer 1 był potrzebny, ale ponieważ nie udało mi się znaleźć go nigdzie indziej, chciałem upewnić się, że rozwiązanie jest publicznie dostępne.

    
odpowiedział Wowfunhappy 28.04.2018, 20:33
źródło
-1

Użyłem apt-mirror.

Jest dobry, ale musisz mieć więcej miejsca na dysku twardym, ponieważ będzie on synchronizowany z serwerem repo.

    
odpowiedział Caterpillar 31.07.2012, 13:25
źródło

Przeczytaj inne pytania na temat tagów