LHC native Einrichtung
Einrichtung von nativen LHC Anwendungen
Diese Anleitung beschreibt die Installation von Squid und Cerns CVMFS auf Ubuntu Systemen. Analog funktioniert dies dann natürlich auch auf Debian, Mint und anderen verwandten Distributionen. Bei SuSE oder RedHat sind die entsprechenden Paketverwaltungstools (zypper/yast & yum/dnf) zu verwenden, auch kann der Squid Nutzer und dessen Gruppe eine andere sein, zB. "squid" anstelle von "proxy".
Im Rahmen dieser Anleitung nutzen wir beispielhaft das in der Tabelle gelistete Subnetz und eine IP daraus für den Squid Rechner. Dieses ist das LAN-seitige Defaultsubnetz der meisten Fritzboxen. Andere Router nutzen aber zB. das Subnetz 192.168.0.0/24.
LAN Subnetz | 192.168.178.0/24 |
IP des Squid Rechners | 192.168.178.4 |
Wurde die IP des Rechners per DHCP vergeben, sollte diese im Router dem Rechner fest zugewiesen werden, bzw. eine feste IP händisch konfiguriert werden. Sollte das eigene Subnetz vom Beispiel abweichen, ist dieses in der squid.conf, der CVMFS default.local sowie dem BOINC Client anzupassen.
Squid
Squid ist ein cachender Proxyserver, er wird idR. genutzt um Netzinhalte zu cachen und damit den Zugriff auf diese zu beschleunigen. Damit einher geht eine Reduzierung der beanspruchten Netzwerkbandbreite. Es empfiehlt sich ausdrücklich Squid über die distributionseigene Paketverwaltung zu installieren, da diese den Cache automatisch und unterhalb eines eigenen Benutzers startet. Auch Konfigurationen für die automatische Rotation der Squid Log Dateien sind enthalten, diese wachsen also nicht ins unermessliche an.
Installation
Cacheverzeichnis anlegen:
mkdir -p /var/cache/squid
Squid installieren:
apt install squid
Squid stoppen:
service squid stop
Cacheverzeichnis dem Squid Benutzer "proxy" übergeben:
chown -R proxy:proxy /var/cache/squid
Cache Basisstruktur im Cacheverzeichnis anlegen:
squid -z
Hier zwei mal Enter drücken, dieser Schritt geht schnell, gibt aber keine newline zurück, scheint daher zu hängen.
Konfiguration
Die eigentliche Konfiguration der Squidcaches erfolg anhand der im LHC Forum abgelegten Konfiguration. Es lohnt sich diesen Thread nochmals zu überfliegen, da Änderungen an der Beispielkonfiguration nicht mehr im Startbeitrag eingepflegt werden können. Stand 26.02.2020 sieht die /etc/squid/squid.conf folgendermaßen aus:
# Squid configuration for BOINC # Based on squid version 3.5 # See also: http://www.squid-cache.org/ # Every line starting with "#" represents a comment. # Define your local hosts/networks here. # If neither "crunchers" nor "localnet" is set none of your devices will be permitted to use the proxy. # The examples show the principle. # For advanced options read the Squid documentation. # # Examples: # # Either enter a list of IPs representing your computers that are permitted to use the proxy. # Each IP on a separate line. # acl crunchers src 198.51.100.20 # acl crunchers src 198.51.100.31 # acl crunchers src 198.51.100.37 # acl crunchers src 198.51.100.42 # # Or enter complete network ranges. # Be aware that this may permit devices like printers or TVs that you may not want to use the proxy. # acl localnet src 192.0.2.0/24 # acl localnet src 198.51.100.0/24 acl localnet src 192.168.178.0/24 acl SSL_ports port 443 acl Safe_ports port 80 acl Safe_ports port 443 acl Safe_ports port 1025-65535 # unregistered ports acl CONNECT method CONNECT follow_x_forwarded_for allow localhost follow_x_forwarded_for deny all # # Start of extra section 1 # Requests that need special handling # worldcommunitygrid doesn't like it if data is taken from the local cache acl wcg_nocache dstdomain .worldcommunitygrid.org cache deny wcg_nocache # if CVMFS uses geoapi, ensure it's checked directly acl cvmfs_geoapi urlpath_regex -i ^/+cvmfs/+[0-9a-z._~-]+/+api/+[0-9a-z._~-]+/+geo/+[0-9a-z._~-]+/+[0-9a-z.,_~-]+ cache deny cvmfs_geoapi # avoids polluting the disk cache with typical onetimers, e.g. ATLAS job data acl boinc_nocache urlpath_regex -i /download[0-9a-z._~-]*/+[0-9a-z._~-]+/+.+ cache deny boinc_nocache # seriously: do NOT cache that! # Based on a frontier cache suggestion acl PragmaNoCache req_header Pragma no-cache cache deny PragmaNoCache # End of extra section 1 # acl Purge method PURGE http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost manager http_access deny manager http_access deny to_localhost # # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS # Depending on the definition of "crunchers" or "localnet" above at least 1 of the following lines must be uncommented. # Examples: # http_access allow crunchers http_access allow localnet http_access allow localhost # Last "http_access" line. # Order matters, hence all "http_access" lines following this one will be ignored. http_access deny all # http_port # don't bind it to an IP that is accessible from outside unless you know what you do. # Examples: # http_port localhost:3128 # # This assumes 198.51.100.99 is the external IP of the Squid box # http_port 198.51.100.99:3128 # # default setting that binds Squid to all IPs of the Squid box http_port 3128 # A MUST on Windows. # If unsure try the the LAN IP of your internet router. # Avoid using external DNS here. # On Linux this option shouldn't be necessary # dns_nameservers 198.51.100.1 max_filedescriptors 4096 # Required OFF for intercepted traffic from LHCb VMs client_dst_passthru off # You don't believe this is enough? # For sure, it is! cache_mem 256 MB maximum_object_size_in_memory 24 KB memory_replacement_policy heap GDSF # Keep it large enough to store vdi files in the cache. # See extra section 1 how to avoid onetimers eating up your disk storage. # min-size=xxx keeps very small files away from your disk # 20000 limits the disk cache to 20 GB cache_replacement_policy heap LFUDA maximum_object_size 6144 MB cache_dir aufs /var/cache/squid 20000 16 64 min-size=7937 # default=10 logfile_rotate 10 # logformat has to be changed according to your needs and the capabilities of your logfile analyser logformat my_awstats %>A %lp %ui %un [%tl] "%rm %>ru HTTP/%rv" %>Hs %st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh access_log stdio:/var/log/squid/access.log logformat=my_awstats #access_log none strip_query_terms off coredump_dir none ftp_user anonymous@ # max_stale 1 week #default # extended to be prepared for a project reset max_stale 37 days # 1 line is required to avoid the ancient default settings # be conservative # don't violate the HTTP standards refresh_pattern . 0 0% 0 store_avg_object_size 1800 KB shutdown_lifetime 0 seconds # booster 1! collapsed_forwarding on # booster 2! client_persistent_connections on server_persistent_connections on log_icp_queries off dns_defnames on dns_v4_first on forwarded_for transparent ##### End of squid.conf
Die gibt es nun 2 Möglichkeiten den Squid Zugriff zu erlauben.
Auf Netzwerkbasis, hier wird erst ein localnet definiert und diesem dann der HTTP Zugriff gewährt:
acl localnet src 192.168.178.0/24 http_access allow localnet
Alle Rechner des angegebenen Netzwerkes dürfen daraufhin auf den Cache zugreifen.
Alternativ können auch nur einzelne Rechner erlaubt werden, dies kann über folgende Einträge erfolgen:
acl crunchers src 192.168.178.20 acl crunchers src 192.168.178.38 http_access allow crunchers
Nun wird der Squid seine Services nur den Rechnern 192.168.178.20 & 192.168.178.38 ermöglichen.
Den Squid nun mit der neuen Konfiguration starten:
service squid start
Ob der Squid genutzt wird, lässt sich einfach über sein Zugriffslog verfolgen:
tail -f /var/log/squid/access.log
Startet nach abgeschlossener Konfiguration eine neue native WU, kommen hier innerhalb der ersten Minuten jeweils hunderte bis tausende Einträge hinzu.
CVMFS
Das CernVM File System ist ein http basiertes read-only Netzwerkdateisystem. Es wird genutzt um Software innerhalb der High Performance Computing (HPC) Umgebung des CERN zu verteilen. Daten im CVMFS werden erst bei Bedarf geladen und können lokal gecached werden.
Installation
Cern CVMFS Paketinformationen ziehen, installieren und den Download wieder entfernen:
wget https://ecsft.cern.ch/dist/cvmfs/cvmfs-release/cvmfs-release-latest_all.deb sudo dpkg -i cvmfs-release-latest_all.deb rm -f cvmfs-release-latest_all.deb
CVMFS installieren:
sudo apt-get update sudo apt-get install cvmfs cvmfs-config-default
CVMFS Basissetup:
sudo cvmfs_config setup sudo wget https://lhcathome.cern.ch/lhcathome/download/default.local -O /etc/cvmfs/default.local sudo cvmfs_config reload
Die folgenden Schritte sind notwendig um die nativ laufenden WUs pausieren und wieder aufwecken zu können. Hierzu wird eine control group (cgroup) erstellt, die dieses ermöglicht:
sudo sed -i '$ a\kernel.unprivileged_userns_clone = 1' /etc/sysctl.conf sudo sysctl -p sudo wget http://lhcathome.cern.ch/lhcathome/download/create-boinc-cgroup -O /sbin/create-boinc-cgroup sudo wget http://lhcathome.cern.ch/lhcathome/download/boinc-client.service -O /etc/systemd/system/boinc-client.service sudo echo "MemoryAccounting=true" >> /etc/systemd/system/boinc-client.service sudo echo "IOAccounting=true" >> /etc/systemd/system/boinc-client.service sudo echo "BlockIOAccounting=true" >> /etc/systemd/system/boinc-client.service sudo echo "CPUAccounting=true" >> /etc/systemd/system/boinc-client.service sudo systemctl daemon-reload sudo systemctl restart boinc-client
Konfiguration
Über die CVMFS Konfigurationsdatei default.local kann der Cache nutzbar gemacht werden. CVMFS_HTTP_PROXY ist auskommentiert und muss noch angepasst werden:
# CVMFS_HTTP_PROXY="auto;DIRECT" => CVMFS_HTTP_PROXY="http://192.168.178.4:3128;DIRECT"
Nach dem Abspeichern einmal die Konfiguration neu einlesen:
cvmfs_config reload
Das Kommando cvmfs_config stat zeigt jetzt s1cern-cvmfs.openhtc.io anstatt cvmfs-stratum-one.cern.ch als nächstes Cache level, zB. für ATLAS sieht das folgendermaßen aus:
# /usr/bin/cvmfs_config stat atlas.cern.ch VERSION PID UPTIME(M) MEM(K) REVISION EXPIRES(M) NOCATALOGS CACHEUSE(K) CACHEMAX(K) NOFDUSE NOFDMAX NOIOERR NOOPEN HITRATE(%) RX(K) SPEED(K/S) HOST PROXY ONLINE 2.8.0.0 3963658 1 24568 79806 2 1 3942964 4194305 0 130560 0 0 n/a 530 186 http://s1cern-cvmfs.openhtc.io/cvmfs/atlas.cern.ch http://192.168.178.4:3128 1
BOINC Client
Die Proxyeinstellungen können sowohl über die GUI als auch direkt in der cc_config.xml gesetzt werden. Eine der beiden Methoden ist ausreichend.
BOINC Manager
Im BOINC Manager via Optionen -> Sonstige Einstellungen... den Tab HTTP Proxyserver auswählen.
Haken setzen bei "Über HTTP Proxyserver verbinden", dann Adresse und Port befüllen:
Adresse: 192.168.178.4 Port: 3128
cc_config.xml
<cc_config> <options> <proxy_info> <http_server_name>192.168.178.4</http_server_name> <http_server_port>3128</http_server_port> </proxy_info> </options> </cc_config>
Anschließend die cc_config über boinccmd neu einlesen:
boinccmd --read_cc_config