Thread Starter
- Mitglied seit
- 24.12.2004
- Beiträge
- 3.362
- Desktop System
- Friday Gaming
- Prozessor
- AMD Ryzen 5 5600X
- Mainboard
- ASUS TUF Gaming B550 Plus
- Kühler
- bequiet! Dark Rock Slim
- Speicher
- Corsair Vengeance LPX Schwarz 16GB Kit (2x8GB) DDR4-3200 CL16
- Grafikprozessor
- MSI RTX 4080 Gaming X Trio
- Display
- Alienware AW3418DW
- SSD
- Samsung 980 Pro 1 TB M.2
- Gehäuse
- be quiet! Pure Base 500
- Netzteil
- be quiet! Straight Power 11 850W
- Keyboard
- Razer Ornata Chroma
- Mouse
- Razer Deathadder
- Betriebssystem
- Windows 11 Pro
Wer in einer etwas größeren Firma arbeitet und ein paar mehr Apfelcomputer im Betrieb hat, kann sich einmal die kostenlose und quelloffene Python Software Reposado anschauen. Mit dieser ist es möglich sehr schnell und einfach einen eigenen MacOSX Updateserver aufzubauen. Über diese können sich eure MacOSX Clients Updates laden. Das spart natürlich viel Traffic nach außen und ist vor allem massiv schneller da es über das lokale Netzwerk funktioniert.
Ihr könnt Reposado theoretisch auf einem Windows, Linux oder MacOSX Rechner installieren. Ich werde jedoch folgende Konfiguration wählen:
- Ubuntu Server 64bit 12.04 LTS
- Nginx Webserver
- Python 2.5 - 2.7
- Curl
- freier Port 80 in der Firewall für diesen Host
Hardwaretechnisch seit ihr relativ unlimitiert. Ich habe den Server in meinem Fall auf einem ESX Cluster System installiert. 2GB RAM reichen vollkommen, jedoch solltet ihr mindestens 200GB Festplattenplatz haben. Denn alle herruntergeladenen Updates von Apple wiegen schon gut und gerne 130GB (Tendenz steigend).
Zuerst solltet ihr also einen aufgesetzten und nutzbaren Ubuntu Server vor euch haben. Am besten natürlich jungfräulich ohne viel Schindluder installiert. SSH ist natürlich in Ordnung. Ich führe alle Kommandos als root aus. Falls ihr alles lieber über "sudo" in eurem User machen wollt setzt einfach immer ein "sudo" vor die Befehle.
Als erstes installieren wir die Versionierungssoftware "Git". Dies machen wir über den Befehl "apt-get install git-core". Mit Git clonen wir die neuste Version von Reposado über Github auf unseren Server. Deswegen cd´en wir uns erstmal in "/opt/". Dort clonen wir nun das Repository mit dem Befehl "git clone https://github.com/wdas/reposado.git". Wenn das durchgelaufen ist können wir uns einmal den Ordnerinhalt anzeigen lassen mit "ls". Dort sollten wir nun einen "reposado" Ordner sehen. Bevor wir die Installation starten, müssen wir jedoch erstmal die Basis für das Updateverzeichnis erstellen.
Daher erstellen wir zwei Verzeichnisse die später vom Webserver als Auslieferungsverzeichnis für die Updates dienen. Ich habe diese auf einer seperaten Festplatte in "/mnt/reposado" erstellt. Ihr könnt sie jedoch auch z.B. in "/var/www/" erstellen. Das bleibt euch überlassen. Erstellt an dem Ort eures Vertrauens daher die beiden Ordner "html" und "metadata". Der Besitzer des Ordners sollte der User sein der später den Sync Prozess immer anstoßen wird. In meinem Fall wieder root. Die Gruppenrechte sollten www-data sein. Daher chown´en wir die beiden Verzeichnisse passend mit "chown -R root:www-data html metadata". Danach noch die Lese,Schreibrecht setzen mit "chmod -R 775 hmtl metadata". Damit sind die Verzeichnisse fertisch für den Sync.
Wir gehen nun wieder zurück in unser reposado Verzeichnis mit "cd /opt/reposado". Schauen wir uns an was drinliegt mit "ls". Es sollte ungefähr folgender Kram drin sein: "code docs other setup.py". Wir interessieren uns aber nur für das "code" Verzeichnis. Deswegen ab rein da mit "cd code". Dort drin zeigen wir uns wieder an was drin liegt und es müssten ungefähr diese Files drin liegen: "reposadolib repo_sync repoutil". Wir starten nun die Konfiguration mit "./repoutil --configure". Ihr bekommt nun drei Fragen gestellt:
Wenn ihr damit fertig seit wird im Code Verzeichnis nun eine Datei zu finden sein die sich "preferences.plist" nennt. Darin gespeichert sich die Einstellungen die wir gerade angegeben haben. Dort könnt ihr also Änderungen durchführen ohne wieder den configure machen zu müssen.
Nun starten wir den Sync Prozess. Dieser kann, je nachdem wie schnell die Internetleitung ist, ein paar Stunden dauern. Startet ihn mit "./repo_sync". Jetzt lädt sich Reposado die ganzen Updates runter. Daher lehnt euch zurück und zockt ein bisschen was ... oder lasst es einfach über Nacht laufen. Wenn der Sync Prozess fertig ist seht ihr am Ende folgende Nachricht: "repo_sync run ended". Jetzt installieren wir einen Webserver zur Auslieferung der Updates.
Wie bereits erwähnt wähle ich einen Nginx Webserver. Da dieser sehr schnell und relativ klein für das System ist. Ihr könnt jedoch auch einen Apache2 Webserver nutzen. Wir installieren jetzt den Nginx Server mit "apt-get install nginx". Wenn dieser Prozess durchgelaufen ist, modifizieren wir noch die Standard vHost Konfiguration mit dem Befehl "vi /etc/nginx/sites-enabled/default". Dort passen wir nun den Auslieferungspfad an. Dies sieht bei mir wie folgt aus:
Nun folgt noch eine kleine Modifikation. Damit wir später weniger Aufwand haben, fügen wir eine kleine Rewrite Rule ein die automatisch die richtige Catalog Datei dem ankommenden OSX System anbietet. Diese fügen wir einfach nach dem letzten "}" von obiger Serverkonfiguration ein:
Danach starten wir unseren Nginx Webserver neu mit dem Befehle "/etc/init.d/nginx restart". Wenn dort nun steht das alles ohne Fehler neugestartet ist machen wir weiter. Falls ein Fehler auftritt, prüft noch einmal ob das root Verzeichnis des vHosts korrekt ist. Wir gehen davon aus das alles geklappt hat. Geht nun einfach mal mit eurem Browser auf folgende Adresse: "http://IP.DES.SERVERS/content/catalogs/others/index-leopard-snowleopard.merged-1.sucatalog". Ihr sollte nun eine Datei runterladen oder angezeigt bekommen. Schaut einfach mal rein was drin steht, dürfte ein bisschen was sein Damit klappt die grundlegende Funktionalität des Servers schon einmal. Wir stellen jetzt noch einen Cronjob damit Reposado stündlich prüft ob neue Updates verfügbar sind. Dies machen wir mit "vi /etc/crontab". Dort tragen wir ganz am Ende folgendes ein:
Dadurch führt der User root stündlich und an jedem Tag das "repo_sync" Skript aus und schreibt ein Log mit dem Infos des letzten Sync in die Datei "sync_log" im Verzeichnis "/opt/reposado/code/". Damit ist die Konfiguration von Reposado abgeschlossen. Nun geht es an die Clients.
Ihr habt zwei Möglichkeiten die Clients mit euren Updates zu versorgen, das ist einmal die DNS Variante (diese funktioniert jedoch nicht mehr mit Mountain Lion) und einmal die OSX Updatepfad Konfiguration. Letztere ist einfacher aber verhindert das sich Mitarbeiter mit ihren Arbeitsrechner zuhause Updates laden können. Bei Interesse schreibe ich auch die DNS Variante hier dazu, der einfachheit halber nutzen wir jedoch jetzt die OSX Updatepfad Konfiguration. Öffnet ein Terminal auf eurem Mac und tippt diesen Befehl ein "sudo defaults read /Library/Preferences/com.apple.SoftwareUpdate CatalogURL". Ihr solltet als Antwort ungefähr folgendes erhalten:
Das bedeutet das ihr keinen anderen Updateserver konfiguriert habt. Dies machen wir jetzt jedoch mit dem Befehl "sudo defaults write /Library/Preferences/com.apple.SoftwareUpdate CatalogURL http://IP.DES.SERVERS/index.sucatalog". Nun gehen wir zurück an den Ubuntu Server und starten den Befehl "tail -f /var/log/nginx/access.log". Damit hängen wir uns an die Logdatei dran und zeigen direkt Änderungen an der Datei an. Geht nun wieder zurück an euren Mac und startet das Softwareupdate. Auf dem Ubuntu Server sollte es jetzt rundgehen und einige Nachrichten auftauchen wie z.B.:
Das bedeutet das der Client an den Reposado Server kommt und sich nun die Informationen zieht die er momentan benötigt zum Updaten. Und damit seit ihr fertig! Glückwunsch, ihr habt nun euren eigenen MacOSX Updateserver konfiguriert. Sorry für den ganzen Text, aber Bilder dazu kann man wenig machen
Ihr könnt Reposado theoretisch auf einem Windows, Linux oder MacOSX Rechner installieren. Ich werde jedoch folgende Konfiguration wählen:
- Ubuntu Server 64bit 12.04 LTS
- Nginx Webserver
- Python 2.5 - 2.7
- Curl
- freier Port 80 in der Firewall für diesen Host
Hardwaretechnisch seit ihr relativ unlimitiert. Ich habe den Server in meinem Fall auf einem ESX Cluster System installiert. 2GB RAM reichen vollkommen, jedoch solltet ihr mindestens 200GB Festplattenplatz haben. Denn alle herruntergeladenen Updates von Apple wiegen schon gut und gerne 130GB (Tendenz steigend).
Zuerst solltet ihr also einen aufgesetzten und nutzbaren Ubuntu Server vor euch haben. Am besten natürlich jungfräulich ohne viel Schindluder installiert. SSH ist natürlich in Ordnung. Ich führe alle Kommandos als root aus. Falls ihr alles lieber über "sudo" in eurem User machen wollt setzt einfach immer ein "sudo" vor die Befehle.
Als erstes installieren wir die Versionierungssoftware "Git". Dies machen wir über den Befehl "apt-get install git-core". Mit Git clonen wir die neuste Version von Reposado über Github auf unseren Server. Deswegen cd´en wir uns erstmal in "/opt/". Dort clonen wir nun das Repository mit dem Befehl "git clone https://github.com/wdas/reposado.git". Wenn das durchgelaufen ist können wir uns einmal den Ordnerinhalt anzeigen lassen mit "ls". Dort sollten wir nun einen "reposado" Ordner sehen. Bevor wir die Installation starten, müssen wir jedoch erstmal die Basis für das Updateverzeichnis erstellen.
Daher erstellen wir zwei Verzeichnisse die später vom Webserver als Auslieferungsverzeichnis für die Updates dienen. Ich habe diese auf einer seperaten Festplatte in "/mnt/reposado" erstellt. Ihr könnt sie jedoch auch z.B. in "/var/www/" erstellen. Das bleibt euch überlassen. Erstellt an dem Ort eures Vertrauens daher die beiden Ordner "html" und "metadata". Der Besitzer des Ordners sollte der User sein der später den Sync Prozess immer anstoßen wird. In meinem Fall wieder root. Die Gruppenrechte sollten www-data sein. Daher chown´en wir die beiden Verzeichnisse passend mit "chown -R root:www-data html metadata". Danach noch die Lese,Schreibrecht setzen mit "chmod -R 775 hmtl metadata". Damit sind die Verzeichnisse fertisch für den Sync.
Wir gehen nun wieder zurück in unser reposado Verzeichnis mit "cd /opt/reposado". Schauen wir uns an was drinliegt mit "ls". Es sollte ungefähr folgender Kram drin sein: "code docs other setup.py". Wir interessieren uns aber nur für das "code" Verzeichnis. Deswegen ab rein da mit "cd code". Dort drin zeigen wir uns wieder an was drin liegt und es müssten ungefähr diese Files drin liegen: "reposadolib repo_sync repoutil". Wir starten nun die Konfiguration mit "./repoutil --configure". Ihr bekommt nun drei Fragen gestellt:
Code:
- Path to store replicated catalogs and updates: (Pfad zum HTML Verzeichnis das ihr vorher erstellt habt)
- Path to store Reposado metadata: (Pfad zum Metadata Verzeichnis das ihr vorher erstellt habt)
- Base URL for your local Software Update Service: (Falls ihr die Updates über eine URL verteilen wollt. Ich habe einfach die IP des Servers angebenen z.B. [URL]http://13.37.0.1[/URL])
Wenn ihr damit fertig seit wird im Code Verzeichnis nun eine Datei zu finden sein die sich "preferences.plist" nennt. Darin gespeichert sich die Einstellungen die wir gerade angegeben haben. Dort könnt ihr also Änderungen durchführen ohne wieder den configure machen zu müssen.
Nun starten wir den Sync Prozess. Dieser kann, je nachdem wie schnell die Internetleitung ist, ein paar Stunden dauern. Startet ihn mit "./repo_sync". Jetzt lädt sich Reposado die ganzen Updates runter. Daher lehnt euch zurück und zockt ein bisschen was ... oder lasst es einfach über Nacht laufen. Wenn der Sync Prozess fertig ist seht ihr am Ende folgende Nachricht: "repo_sync run ended". Jetzt installieren wir einen Webserver zur Auslieferung der Updates.
Wie bereits erwähnt wähle ich einen Nginx Webserver. Da dieser sehr schnell und relativ klein für das System ist. Ihr könnt jedoch auch einen Apache2 Webserver nutzen. Wir installieren jetzt den Nginx Server mit "apt-get install nginx". Wenn dieser Prozess durchgelaufen ist, modifizieren wir noch die Standard vHost Konfiguration mit dem Befehl "vi /etc/nginx/sites-enabled/default". Dort passen wir nun den Auslieferungspfad an. Dies sieht bei mir wie folgt aus:
Code:
server {
#listen 80; ## listen for ipv4; this line is default and implied
#listen [::]:80 default ipv6only=on; ## listen for ipv6
root /mnt/reposado/html/;
index index.html index.htm;
# Make site accessible from http://localhost/
server_name localhost;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to index.html
try_files $uri $uri/ /index.html;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}
Nun folgt noch eine kleine Modifikation. Damit wir später weniger Aufwand haben, fügen wir eine kleine Rewrite Rule ein die automatisch die richtige Catalog Datei dem ankommenden OSX System anbietet. Diese fügen wir einfach nach dem letzten "}" von obiger Serverkonfiguration ein:
Code:
## 10.4.x - Tiger
if ( $http_user_agent ~ "Darwin/8" ){
rewrite ^/index(.*)\.sucatalog$ /content/catalogs/index$1.sucatalog last;
}
## 10.5.x - Leopard
if ( $http_user_agent ~ "Darwin/9" ){
rewrite ^/index(.*)\.sucatalog$ /content/catalogs/others/index-leopard.merged-1$1.sucatalog last;
}
## 10.6.x - Snow Leopard
if ( $http_user_agent ~ "Darwin/10" ){
rewrite ^/index(.*)\.sucatalog$ /content/catalogs/others/index-leopard-snowleopard.merged-1$1.sucatalog last;
}
## 10.7.x - Lion
if ( $http_user_agent ~ "Darwin/11" ){
rewrite ^/index(.*)\.sucatalog$ /content/catalogs/others/index-lion-snowleopard-leopard.merged-1$1.sucatalog last;
}
## 10.8.x - Mountain Lion
if ( $http_user_agent ~ "Darwin/12" ){
rewrite ^/index(.*)\.sucatalog$ /content/catalogs/others/index-mountainlion-lion-snowleopard-leopard.merged-1$1.sucatalog last;
}
Danach starten wir unseren Nginx Webserver neu mit dem Befehle "/etc/init.d/nginx restart". Wenn dort nun steht das alles ohne Fehler neugestartet ist machen wir weiter. Falls ein Fehler auftritt, prüft noch einmal ob das root Verzeichnis des vHosts korrekt ist. Wir gehen davon aus das alles geklappt hat. Geht nun einfach mal mit eurem Browser auf folgende Adresse: "http://IP.DES.SERVERS/content/catalogs/others/index-leopard-snowleopard.merged-1.sucatalog". Ihr sollte nun eine Datei runterladen oder angezeigt bekommen. Schaut einfach mal rein was drin steht, dürfte ein bisschen was sein Damit klappt die grundlegende Funktionalität des Servers schon einmal. Wir stellen jetzt noch einen Cronjob damit Reposado stündlich prüft ob neue Updates verfügbar sind. Dies machen wir mit "vi /etc/crontab". Dort tragen wir ganz am Ende folgendes ein:
Code:
# Reposado RepoSync anstoßen
0 * * * * root /opt/reposado/code/repo_sync >> /opt/reposado/code/sync_log
Dadurch führt der User root stündlich und an jedem Tag das "repo_sync" Skript aus und schreibt ein Log mit dem Infos des letzten Sync in die Datei "sync_log" im Verzeichnis "/opt/reposado/code/". Damit ist die Konfiguration von Reposado abgeschlossen. Nun geht es an die Clients.
Ihr habt zwei Möglichkeiten die Clients mit euren Updates zu versorgen, das ist einmal die DNS Variante (diese funktioniert jedoch nicht mehr mit Mountain Lion) und einmal die OSX Updatepfad Konfiguration. Letztere ist einfacher aber verhindert das sich Mitarbeiter mit ihren Arbeitsrechner zuhause Updates laden können. Bei Interesse schreibe ich auch die DNS Variante hier dazu, der einfachheit halber nutzen wir jedoch jetzt die OSX Updatepfad Konfiguration. Öffnet ein Terminal auf eurem Mac und tippt diesen Befehl ein "sudo defaults read /Library/Preferences/com.apple.SoftwareUpdate CatalogURL". Ihr solltet als Antwort ungefähr folgendes erhalten:
Code:
CatalogURL
2012-10-05 11:54:18.741 defaults[3793:a07]
The domain/default pair of (/Library/Preferences/com.apple.SoftwareUpdate, CatalogURL) does not exist
Das bedeutet das ihr keinen anderen Updateserver konfiguriert habt. Dies machen wir jetzt jedoch mit dem Befehl "sudo defaults write /Library/Preferences/com.apple.SoftwareUpdate CatalogURL http://IP.DES.SERVERS/index.sucatalog". Nun gehen wir zurück an den Ubuntu Server und starten den Befehl "tail -f /var/log/nginx/access.log". Damit hängen wir uns an die Logdatei dran und zeigen direkt Änderungen an der Datei an. Geht nun wieder zurück an euren Mac und startet das Softwareupdate. Auf dem Ubuntu Server sollte es jetzt rundgehen und einige Nachrichten auftauchen wie z.B.:
Code:
IP.DES.CLIENTS - - [05/Oct/2012:11:57:30 +0200] "GET /index.sucatalog HTTP/1.1" 200 1203104 "-" "App%20Store/129.7 CFNetwork/596.2.3 Darwin/12.2.0 (x86_64) (MacBookPro8%2C2)"
IP.DES.CLIENTS - - [05/Oct/2012:11:57:30 +0200] "GET /content/downloads/34/44/041-7696/f26r8rlps7os813indz4y58qjllw9dte9e/041-7696.German.dist HTTP/1.1" 200 4860 "-" "App%20Store/129.7 CFNetwork/596.2.3 Darwin/12.2.0 (x86_64) (MacBookPro8%2C2)"
Das bedeutet das der Client an den Reposado Server kommt und sich nun die Informationen zieht die er momentan benötigt zum Updaten. Und damit seit ihr fertig! Glückwunsch, ihr habt nun euren eigenen MacOSX Updateserver konfiguriert. Sorry für den ganzen Text, aber Bilder dazu kann man wenig machen
Zuletzt bearbeitet: