Vraag Hoe een APT-repository in te stellen?


Ik zou graag een APT-repository willen opzetten op een server die een aantal pakketten zal leveren.

Is er een manier om er een te maken? zonder software installeren op de server?

Hoe moeten de bestanden worden georganiseerd?


Bewerk: Ik moet iets verkeerds doen ... kan iemand me alsjeblieft helpen? Ik heb de repository bij http://quickmediasolutions.com/apt/dists

Ik weet niet zeker waar of wat, maar er is iets misconfigureerd. Ik heb momenteel slechts één pakket en het is voor alle architecturen.

Dit is wat aan mijn is toegevoegd /etc/apt/sources.list:

deb http://quickmediasolutions.com/apt stable main

49
2017-07-31 00:33


oorsprong


Kun je bewerken en toevoegen wat voor soort licentie de applicaties zijn die je hebt gedownload? Is dit voor privégebruik of ben je van plan ze te distribueren, enz.? - Jorge Castro
@Jorge: Wat bedoel je? Welke applicaties? - Nathan Osman
Ik probeerde te bepalen of het pakket OSS was dat je alleen maar met het startvenster kon gebruiken. - Jorge Castro
@Jorge: Nee, het is geen OSS. (In feite is het vrijwel de enige app die ik heb geschreven die dat niet is.) - Nathan Osman


antwoorden:


Het opzetten van een triviale repository is heel eenvoudig met behulp van dpkg-scanpackages. Deze pagina legt uit hoe u een triviale repo opzet, en deze legt uit hoe het te gebruiken (scroll naar beneden naar voorbeeld 4).


25
2017-07-31 00:55



Een beetje moeite om het te laten werken. Zie mijn update van de vraag. - Nathan Osman
Het lijkt erop dat u een "automatische" repo probeert in te stellen. Voor één (of slechts een paar) pakket (len) ben je veel beter af met een triviale repo. Verplaats uw Packages.gz en deb helemaal naar quickmediasolutions.com/apt/binary. Dan zal je bron zijn deb http://quickmediasolutions.com/apt binary/. - mac9416
Triviale repo's geven problemen bij het vastzetten, maar ja, ze zijn de snelste / eenvoudigste manier om een ​​repo in te stellen voor slechts een paar pakketten. Het zou dom lijken om een ​​gepoolde repo in te stellen voor slechts 2 - 3 pakketten. - Tim Post♦
George, heb je dit ooit kunnen laten werken? - mac9416
@mac: Nou ... ik heb nog geen tijd gehad om het te proberen :) Uiteindelijk heb ik alles geüpload naar een PPA. - Nathan Osman


Stel gewoon een eenvoudige maar ondertekende repository op een webserver. Omdat de meeste andere tutorials enigszins gedateerd of omslachtig zijn, zal ik proberen de procedure hier te repliceren. De eerste configuratie kost wat moeite, maar het eenvoudige build-script zorgt ervoor dat het eenvoudig te beheren is. En je kunt gewoon nieuw binnengaan *.deb bestanden bijwerken, bijwerken of een cron-taak laten verwerken.

Genereer enkele ondertekeningssleutels

Eerst moet je een maken gpg handtekeningsleutel voor pakketten en uw repository. Maak er een (4) RSA-handtekeningsleutel, geen wachtwoord en geef hem een ​​uniek $KEYNAME wanneer erom wordt gevraagd. (Verdere voorbeelden veronderstellen "dpkg1"als keyname.)

 gpg --gen-key
 gpg -a --export-secret-key dpkg1 > secret.gpg
 gpg -a --export dpkg1            > public.gpg

Ik zei geen wachtwoord, omdat je webserver geen ingebouwde aap heeft om hem herhaaldelijk in te typen. En de ondertekende pakketten en repository zijn alleen bedoeld om de klachten van update-managers daarover tevreden te stellen. Upload beide sleutels naar het nieuwe /apt/ repository directory op uw webserver, maar verwijder de secret.gpg sleutel na initialisatie.

Update CGI-script

Dit is de eenvoudige update shell / CGI-script ervoor:

#!/bin/sh
echo Status: 200 Okay
echo Content-Type: text/plain
echo
echo Rebuilding APT repository:

{
  #-- settings
  export GNUPGHOME=/var/www/usr12345/files
  export KEYNAME=dpkg1
  #-- one-time setup
  if [ ! -e "$GNUPGHOME/secring.gpg" ] ; then
     gpg --import -v -v ./secret.gpg
     gpg --import -v -v ./public.gpg
     gpg --list-keys
  fi

  #-- symlink .deb files from adjacent sub-directories
  find .. -name '*.deb' -exec ln -s '{}' . \;

  #-- build Packages file
  apt-ftparchive packages . > Packages
  bzip2 -kf Packages

  #-- signed Release file
  apt-ftparchive release . > Release
  gpg --yes -abs -u $KEYNAME -o Release.gpg Release

} 2>&1

De boom gpg regels hoeven maar één keer te worden uitgevoerd om de GPG-instellingen in een of andere directory te initialiseren $GNUPGHOME (boven de documentroot). Verwijder alleen de secret.gpg na succes.

Een uniek kenmerk van dit kleine shell-script is dat het elke accepteert *.deb bestanden die u invoert, maar ook recursief zoekt (beginnend vanaf een niveau hoger) voor anderen en ze koppelt. (Heeft .htaccess nodig Options FollowSymLinks uiteindelijk).

U kunt dit script handmatig uitvoeren als CGI of per cron-job. Maar verberg het, of beter nog, haal het uit de document root.

Omdat het een "triviale" apt-repository is, heeft het het volgende nodig apt-sources.list entry:

deb http://example.org/deb/  ./    # Simple signed repo

Dat is geschikt voor repositories met één architectuur en als je geen honderden pakketten verwacht.

Pakket ondertekenen

Het ondertekenen van uw individuele pakketten is ook triviaal, als u eenmaal uw gpg-sleutels hebt ingesteld:

dpkg-sig -k dpkg1 -s builder *.deb

(Dit moet worden gedaan op het werkstation waar pakketten worden gebouwd, niet op de repository-webserver.)

Niet-ondertekende repository

Als u geen ondertekende pakketten nodig hebt, kunt u het update-script naar beneden slepen naar:

  dpkg-scanpackages . > Packages
  bzip2 -kf Packages

Die nog steeds kan worden gebruikt door gemiddelde gebruikers, maar waarvoor een aangepaste markering is vereist apt.sources:

deb [trusted=yes] http://apt.example.org/deb/ ./

Maar gebruik alsjeblieft niet de trusted=yes markeer gewoon voor alles, of als u niet zeker bent over de oorsprong van het pakket.

Voor bruikbaarheid

Stuur voor eindgebruikers een HEADER.html in de repository-directory. apaches mod_auto_index zal die notitie toevoegen:

<h1>http://example.org/apt/</h1>
<dl>
<dt>Add this repository to /etc/apt/sources.list as:
 <dd><kbd>deb http://example.org/apt/ ./  # example repo</kbd>
<dt>Import verification key with:
 <dd><kbd>wget -q http://http://example.org/apt/public.gpg -O- | sudo apt-key add -</kbd>
</dl>

alternatieven

Er zijn een paar tools om beheer van repositories tegenwoordig te automatiseren. En er zijn zelfs repository online hosters en pakket-build services (gemfury, packagecloud, bintray enz.)

  • Een redelijk handig alternatief is prm. Het is een Ruby-script, dat complexe APT- en YUM-repos bouwt. (Maar laten we hopen dat RPM uiteindelijk snel zal verdwijnen ..) - Het is het best geïnstalleerd per gem install prm.

  • En ik heb ook een klein script geschreven om dit op dezelfde manier te automatiseren: http://apt.include-once.org/apt-phparchive - Het is niet overdreven robuust en geschreven in PHP (voor een keer is dit toevallig) en oorspronkelijk bedoeld voor DEB en RPM-over-APT en Phar-bundels.

Omdat dit nauw gerelateerd is aan de oorspronkelijke vraag, zijn er ook tools om Debian-pakketten gemakkelijker te bouwen. Enigszins verouderd: EPM. Veel meer contempoary: FPM. En mijn persoonlijke vork daarvan: XPM (meer lui benadering voor het verpakken van scripting language apps.)


37
2017-12-22 08:35





Ja. Je kan dit doen. U hoeft alleen de bestanden op de juiste manier te organiseren en de indexbestanden te maken. Als u de directorystructuur in de documentroot van uw webserver plaatst, kunnen de pakketten alleen via de webserver worden geopend.

Hier is een gedetailleerde beschrijving van hoe de bestanden moeten worden georganiseerd en hoe de indexbestanden worden gemaakt.

U kunt ook een tool gebruiken genaamd reprepro als je bereid bent dat ene pakket te installeren. Dit maakt de administratie iets handiger.


7
2017-07-31 00:44



@txwikinger: De reden dat ik geen pakketten kan installeren is omdat de server centOS draait :) - Nathan Osman
Goed. dat hoeft niet. U kunt alles op een andere computer maken en gewoon de hele boom naar de centos-server rsyncen - txwikinger
Ja, ik zou zeker het gebruik van reprepro opheffen. Het zal je leven zoveel gemakkelijker maken. Het maken van de repo op een andere computer kan zelfs een functie zijn, voor het geval het u toestaat uw ondertekeningssleutel beter te beschermen. - andol
@andol & @txwikinger: ik probeer maar kom in de problemen. Zie mijn bijgewerkte vraag. - Nathan Osman
Voor uw dists-bestand heeft u nog steeds ./binary-<specific arch> nodig. - andol


Je kunt misschien ook een a overwegen Launchpad PPA


2
2017-07-31 11:23





Voor iedereen die geconfronteerd wordt met deze fout na het volgen van het antwoord van mario:

Unable to find expected entry 'Packages' in Release file (Wrong sources.list entry or malformed file)

doe het volgende:

dpkg-scanpackages debs /dev/null > Packages
gzip -k Packages
apt-ftparchive release . > Release
gpg --default-key $KEYID -abs -o Release.gpg Release

Ik stop mijn *.deb bestanden in debs map.


0
2018-01-25 07:05