2016-07-19 3 views
3

Ich versuche, einen vollständigen lokalen Pypi-Repository-Spiegel mit Pip-Suchfunktion auf einem Server zu machen, an den ich nur eine externe Festplatte anschließen kann. Um es klar zu sagen, ich möchte kein einfaches Caching-System, der Server ist mit anderen Rechnern in einem komplett geschlossenen Netzwerk verbunden, kein Zugang zum Internet.Wie mache ich einen lokalen Pypi Spiegel ohne Internet Zugang und mit Suche verfügbar?

Was ich bis jetzt getan habe, ist jede pypi-Pakete mit bandersnatch dumping und ich kann pip installieren mit einem einfachen http-Server davor. Ich habe auch den Pypi-Legacy-Quellcode abgerufen und es ohne Python-Pakete funktionieren lassen. Das Problem, auf das ich jetzt stoße, ist, beide Seiten zu verbinden, und ich bin mir nicht einmal sicher, dass dies auf diese Weise geschehen könnte.

Ich habe auch pypiserver getestet. Es könnte getan haben, was ich wollte, aber es ist viel zu langsam mit pip Suche werfen Timeout (sieht aus wie es war nicht gebaut, um so viele Pakete zu behandeln).

Schließlich warf ich einen Blick auf Devpi. Scheint, die Arbeit gut für das zu tun, was ich tun möchte, aber ich suche nach einer Möglichkeit, meinen BanderSnatch Dump leicht in es zu importieren. Es sieht nicht so aus, als könnte ich einen Index erstellen, der auf einem lokalen Verzeichnis basiert.

Vielen Dank für eine Antwort.

+0

Ausgezeichnet Zeitfrage, wie ich auf das gleiche Problem anstarre: Pip-Clients werden keinen Internetzugang haben, brauchen einen vollständigen PyPi-Spiegel, begann mit Bandensnatch, bevor ich es im Wesentlichen nur Doe bemerkte s caching, sah, dass devpi alle kästen - und jetzt versuche herauszufinden, wie ich meinen massiven bandersnatch-download retten kann, indem ich die indexierung von devpi überlagere! – Marakai

+0

@Marakai Ich habe gerade Bandersnatchs massive Müllkippe heruntergeladen. Erzählen Sie mir, dass es eine Verschwendung von Zeit, Aufwand und Bandbreite war? –

+0

@ArjunJRao Nun, ich kann das nur beantworten mit: macht Bandsendersnatch alles was du willst? Dann denke ich, es funktioniert für dich. Laut meinem Kommentar-Zeitstempel verwenden wir Devi seit einem Jahr und es war großartig! Wir speichern nur das, was wir eigentlich von Remote benötigen, anstatt das gesamte PyPi-Archiv, wir können nahtlos unser eigenes Paket-Repository hinzufügen und es gibt einige nette Management-Tools, um die Repositories zu indizieren und zu bereinigen. – Marakai

Antwort

1

ich könnte genauso gut eine richtige Antwort auf diese Frage geben, wie wir haben DevPi ganz schön in unserer Umgebung arbeiten:

  1. DevPi Installieren

DevPi erfordert Python 3! Stellen Sie also sicher, dass Sie die Python 3-Version von pip installiert haben. Verwenden Sie das:

pip install -U devpi 

(wahrscheinlich als root) sollte den Trick tun.

  1. Achten Sie darauf, Ihren Server Firewall

DevPi verwendet Port 3141 standardmäßig geöffnet ist. Wenn Sie firewall-cmd installiert so etwas wie

firewall-cmd --zone=public --add-port=3141/tcp --permanent 
firewall-cmd --reload 

oder einem gleichwertigen Befehl auf Ihrem System.

  1. konfigurieren DevPi

DevPiPyPi aus der Box verwendet wird. Wir wollten auch die Möglichkeit haben, unsere eigenen Pakete, die nur intern zur Verfügung gestellt werden, zu "überlagern". Für lokale nabCERT-Pakete benötigen Sie einen internen Index. Das Schöne daran ist, dass man PyPi selbst als Fallback benutzen kann!

den devpi Server auswählen arbeiten - das ist der Server, den Sie sich gerade befinden, wahrscheinlich

devpi use http://localhost:3141 

nun einen Benutzer erstellen, die die internen Pakete hinzufügen und verwalten können und melden Sie sich mit ihnen

devpi user -c myuser password=mypassword 
devpi login myuser --password mypassword 

nun unseren internen Index erstellen, lokale Pakete zu halten, während sichergestellt wird es PyPI als „Rückfall“

devpi index -c myindex bases=/root/pypi volatile=True 
verwenden
  1. es

    devpi-Server --host = 0.0.0.0 --port = 3141 --serverdir =/var/www/pypi

  2. Try Start up und installieren sie ein Paket

    pip install -i http://localhost:3141/root/pypi/ simplejson

Wenn etwas schief geht, die Protokolle überprüfen, in unserem Fall, dass sie in /var/www/pypi/.xproc/devpi-server/xprocess.log waren

An diesem Punkt, wenn alle oben genannten Einstellungen erfolgreich ausgeführt wurden, sollten Sie einen Web-Browser öffnen können und es am devpi Server mit

http://localhost:3141/myuser/myindex 
Punkt
  1. Fabrikat DevPi startet automatisch

Das variiert. Wir verwenden systemd so habe ich eine Datei/usr/lib/systemd/system/devpi.service

[Unit] 
Requires=network-online.target 
After=network-online.target 

[Service] 
EnvironmentFile=-/etc/sysconfig/devpi 
Type=forking 
PIDFile=/var/www/pypi/.xproc/devpi-server/xprocess.PID 
Restart=always 
ExecStart=/bin/devpi-server --host=0.0.0.0 --port 3141 --serverdir /var/www/pypi --start 
ExecStop=/bin/devpi-server --host=0.0.0.0 --port 3141 --serverdir /var/www/pypi --stop 
User=root 

[Install] 
WantedBy=multi-user.target 

Speichern Sie die Datei und benachrichtigen systemd.

systemctl daemon-reload 
systemctl enable devpi 
  1. Konfigurieren einen Client

Ihre Kunden pip Punkt die neuen DevPi Repository erstellen /etc/pip.conf Datei mit etwas zu verwenden, wie diese

[global] 
trusted-host = <server IP or FQDN> 

[install] 
index-url = http://<server IP or FQDN>:3141/myuser/myindex/+simple/ 

[search] 
index = http://<server IP or FQDN>:3141/myuser/myindex/ 
Verwandte Themen