Heute war ich beim Sun Day in Halle. Detlef Drewanz hat einen interessanten Befehl im Bezug auf Deduplikation genannt: zdb -S <poolname>
Damit lässt sich ermitteln, was eine Deduplikation des zpool bringen würde.
Heute war ich beim Sun Day in Halle. Detlef Drewanz hat einen interessanten Befehl im Bezug auf Deduplikation genannt: zdb -S <poolname>
Damit lässt sich ermitteln, was eine Deduplikation des zpool bringen würde.
Ich wurde in Bezug auf diesen Blog-Eintrag gefragt, was es für Zoneneigenschaften gibt, welche man für Regelmentierungen verwenden kann.
Als ersten möchte ich zeigen, wie man den Hauptspeicher limitieren kann.
root@global$ zonecfg -z myzone zonecfg:myzone> add capped-memory zonecfg:myzone:capped-memory> set physical=500m zonecfg:myzone:capped-memory> set swap=1g zonecfg:myzone:capped-memory> set locked=100m zonecfg:myzone:capped-memory> end zonecfg:myzone> exit
Neben dem Hauptspeicher kann man auch die CPUs regelmentieren. Man dedizierter CPUs zuweisen oder das Scheduling verändern. Hier gibt eine gute Übersicht, bzgl. der Definition der CPU Shares.
root@global$ zonecfg -z myzone zonecfg:myzone> add dedicated-cpu zonecfg:myzone:dedicated-cpu> set ncpus=1-4 zonecfg:myzone:dedicated-cpu> end zonecfg:myzone> exit
Was passiert nun?
Man kann auch sagen, dass eine Zone z.B. maximal 2,5 CPUs benutzen kann. Das sieht wie folgt aus:
root@global$ zonecfg -z myzone zonecfg:myzone> add capped-cpu zonecfg:myzone:capped-cpu> set ncpus=2.5 zonecfg:myzone:capped-cpu> end zonecfg:myzone> exit
Nun möchte ich zeigen, wie man eine Zone 200 CPU-Shares und die FSS (Fair Share Scheduling) Klasse zuweist
root@global$ zonecfg -z myzone zonecfg:myzone> set cpu-shares=200 zonecfg:myzone> set scheduling-class=FSS zonecfg:myzone> exit
Als letztes Quota zum Thema CPU möchte ich zeigen, wie man die Anzahl der Threads/Prozesse begrenzt. Die folgende Zone kann maximal 250 Threads ausführen. Ein einzelner Prozess ohne Thredas zählt als ein Thread.
root@global$ zonecfg -z myzone zonecfg:myzone> add rctl zonecfg:myzone:rctl> set name=zone.max-lwps zonecfg:myzone:rctl> add value (priv=privileged,limit=250,action=deny) zonecfg:myzone:rctl> end
Man kann auf diese Weise auch noch andere Resourcen kontrollieren. Hier findet man eine Übersicher über die Resource Controls
Für Zonen kann es auch interssant sein, den Plattenpatz zu begrenzen. Da in Open Solaris zfs das default-Dateisystem ist, kann man Quotas und Reservations über die entsprechenden zfs-Eigenschaften machen. Die Wurzel der Zone liegt auf dem Dateisystem zones/myzone
root@global$ zonecfg -z myzone zfs set quota=10g zones/myzone root@global$ zonecfg -z myzone zfs set reservation=5g zones/myzone
Manchmal ist schön, wenn man die Systemmail abrufen kann. Bei OpenSolaris gibt es per default keinen Nutzer root und ein normaler Nutzer darf nicht auf Mails von root zugreifen. Die saubere Lösung ist, dass man einen Alias einrichtet. Dazu fügt man der /etc/aliases die folgende Zeilen hinzu. Anschließend werden alle Mails von root an jack weiter geleitet.
####################### # Local aliases below # ####################### root: jack
Nachdem man das nun gemacht hat muss man die /etc/aliases neu einlesen.
jack@walhalla ~ % pfexec newaliases /etc/mail/aliases: 13 aliases, longest 10 bytes, 150 bytes total
Nun schicken wir root eine Testmail. Dazu verwenden wir das Kommando mailx. Um es zu beenden muss man . drücken.
jack@walhalla ~ % mailx root Subject: Hallo Hallo Welt! . EOT
Nun estellt man einen Symlink vom Mailverzeichnis, damit man die Mails auch im Thunderbird lesen kann. Es geht auch jeder ander Mailclient, welcher mit dem mbox-Format umgehen kann
1ss1e32i.default ist das aktuelle Profil, das ist auf jeden Rechner anders.
jack@walhalla ~ % ln -s /var/mail/jack .thunderbird/1ss1e32i.default/Mail/Local\ Folders/System
Fertig! Nun hat man nach dem Neustart von Thunderbird ein Unterverzeichnis System im Verzeichnis Lokale Ordner
Ich wurde gefragt, wie ich den user und den hostname in meinen Code-Umgebungen bunt bekomme. Ich benutze für das Syntaxhighlighting das Plugin WP-Syntax. Dieses wiederrum nutzt GeSHi im Hintergrund.
Damit der Hostname bunt wird, habe ich die Syntax der bash etwas erweitert. Dazu habe ich in der Datei wp-content/plugins/wp-syntax/geshi/geshi ein paar Zeilen hinzu gefügt:
language_data = array ( 'LANG_NAME' => 'Bash', // Bash DOES have single line comments with # markers. But bash also has // the $# variable, so comments need special handling (see sf.net // 1564839) 'COMMENT_SINGLE' => array('#'), 'COMMENT_MULTI' => array(), 'COMMENT_REGEXP' => array( //Variables 1 => "/\\$\\{[^\\n\\}]*?\\}/i", //BASH-style Heredoc 2 => '/<<-?\s*?(\'?)([a-zA-Z0-9]+)\1\\n.*\\n\\2(?![a-zA-Z0-9])/siU', //Escaped String Starters 3 => "/\\\\['\"]/siU", 4 => "/(root@[a-z]+)/i", // root hat sich angemeldet 5 => "/([a-z]+@[a-z]+)/i" // ein normaler User hat sich angemeldet ), .... 'STYLES' => array( 'KEYWORDS' => array( 1 => 'color: #000000; font-weight: bold;', 2 => 'color: #c20cb9; font-weight: bold;', 3 => 'color: #7a0874; font-weight: bold;' ), 'COMMENTS' => array( 0 => 'color: #666666; font-style: italic;', 1 => 'color: #800000;', 2 => 'color: #cc0000; font-style: italic;', 3 => 'color: #000000; font-weight: bold;', 4 => 'color: #FF0000; font-weight: bold;', // Farbe und Font für root 5 => 'color: #0000FF; font-weight: bold;' // Farbe und Font für einen normalen User ), ...
Es handelt sich hierbei um einen Hack. Wenn man das Plugin updatet, muss man diese Änderung wieder vornehmen.
Martin hat mich darauf aufmerksam gemacht, dass bei wordpress die Upload-Funktion für Dateien nicht funktioniert. Also habe ich es promt ausprobiert und siehe da es ging bei mir auch nicht. Die Fehlermeldung Fehler beim Upload der ausgewählten Datei. das hilft einen gar nicht weiter. Die Ursache war, dass man per default in wordpress nur bekannte Dateien hinzufügen darf. Also habe ich in der Datei wp-inludes/functions.php die mime-Typen etwas editiert:
function get_allowed_mime_types() { static $mimes = false; if ( !$mimes ) { // Accepted MIME types are set here as PCRE unless provided $mimes = apply_filters( 'upload_mimes', array( 'jpg|jpeg|jpe' => 'image/jpeg', ... 'odf' => 'application/vnd.oasis.opendocument.formula', '.*' => 'text/plain', // hinzugefügt ) ); } return $mimes; }
Ich kam gestern in die Verlegenheit mal schnell eine Zone aufsetzten zu müssen. Ich dachte mir, wenn ich das mal schnell mache, dann wenigsten mit RAM-Quota und CPU-Begrenzung. Es kann evtl. sein, dass man pkg:/service/resource installieren muss. Dieses Paket ist für die Verwaltung von RAM-Resourcen zuständig.
Ressourcenpools anstellen
rennecke@walhalla ~ % pfexec pooladm -e
Aktuelle Konfiguration in der /etc/pooladm.conf sichern
rennecke@walhalla ~ % pfexec pooladm -s
Nun erstellen wir einen Pool mit einem CPU-Set, welches über maximal 2 CPUs verfügt
rennecke@walhalla ~ % pfexec poolcfg -c 'create pset zone-pset (uint pset.min=1; uint pset.max=2)' rennecke@walhalla ~ % pfexec poolcfg -c 'create pool zone-pool' rennecke@walhalla ~ % pfexec poolcfg -c 'associate pool zone-pool (pset zone-pset)'
Als nächstes aktivieren wir die Konfiguration und speichern sie
rennecke@walhalla ~ % pfexec pooladm -c rennecke@walhalla ~ % pfexec pooladm -s rennecke@walhalla ~ % pfexec pooladm system default string system.comment int system.version 1 boolean system.bind-default true string system.poold.objectives wt-load pool zone-pool int pool.sys_id 1 boolean pool.active true boolean pool.default false int pool.importance 1 string pool.comment pset zone-pset pool pool_default int pool.sys_id 0 boolean pool.active true boolean pool.default true int pool.importance 1 string pool.comment pset pset_default pset zone-pset int pset.sys_id 1 boolean pset.default false uint pset.min 1 uint pset.max 2 string pset.units population uint pset.load 5 uint pset.size 2 string pset.comment cpu int cpu.sys_id 1 string cpu.comment string cpu.status on-line cpu int cpu.sys_id 0 string cpu.comment string cpu.status on-line pset pset_default int pset.sys_id -1 boolean pset.default true uint pset.min 1 uint pset.max 65536 string pset.units population uint pset.load 562 uint pset.size 2 string pset.comment cpu int cpu.sys_id 3 string cpu.comment string cpu.status on-line cpu int cpu.sys_id 2 string cpu.comment string cpu.status on-line
Nun kommen wir zum eigenlichen erstellen der Zone
rennecke@walhalla ~ % pfexec zonecfg -z zone1 zone1: No such zone configured Use 'create' to begin configuring a new zone. zonecfg:zone1> create zonecfg:zone1> set zonepath=/export/zone/zone1 zonecfg:zone1> set autoboot=true zonecfg:zone1> add net zonecfg:zone1:net> set address=192.168.1.10/24 zonecfg:zone1:net> set physical=rge0 zonecfg:zone1:net> set defrouter=192.168.1.1 zonecfg:zone1:net> end zonecfg:zone1> set pool=zone-pool zonecfg:zone1> add capped-memory zonecfg:zone1:capped-memory> set physical=200m zonecfg:zone1:capped-memory> set swap=400m zonecfg:zone1:capped-memory> set locked=30m zonecfg:zone1:capped-memory> end zonecfg:zone1> verify zonecfg:zone1> commit zonecfg:zone1> exit
Ich denke, dass sich alles von selbst erklärt, wenn jedmand Fragen hat, dann bitte einen Kommentar bzw. die Manpage lesen. Als nächsten Schritt installieren wir die Zone und booten sie anschließend.
rennecke@walhalla ~ % pfexec zoneadm -z zone1 install A ZFS file system has been created for this zone. Publisher: Using opensolaris.org (http://pkg.opensolaris.org/dev/ ). Publisher: Using pending (http://pkg.opensolaris.org/pending/). Publisher: Using contrib.opensolaris.org (http://pkg.opensolaris.org/contrib/). Image: Preparing at /export/zone/zone1/root. Cache: Using /var/pkg/download. Sanity Check: Looking for 'entire' incorporation. Installing: Core System (output follows) DOWNLOAD PKGS FILES XFER (MB) Completed 44/44 12305/12305 85.9/85.9 PHASE ACTIONS Installationsphase 17833/17833 Für dieses Abbild sind keine Updates erforderlich. Installing: Additional Packages (output follows) DOWNLOAD PKGS FILES XFER (MB) Completed 36/36 3233/3233 20.6/20.6 PHASE ACTIONS Installationsphase 4329/4329 Note: Man pages can be obtained by installing SUNWman Postinstall: Copying SMF seed repository ... done. Postinstall: Applying workarounds. Done: Installation completed in 606,736 seconds. Next Steps: Boot the zone, then log into the zone console (zlogin -C) to complete the configuration process.
Die Geschwindigkeit zum erstellen der Zone hängt von der Downloadgewindigkeit maßgeblich ab. Wenn man Pech hat, wartet man sehr lange auf die 100 MB…
Nachdem nun die Zone installiert ist müssen wir sie nur noch booten und initial konfigurieren
rennecke@walhalla ~ % pfexec zoneadm -z zone1 boot rennecke@walhalla ~ % pfexec zlogin -C zone1 [Connected to zone 'zone1' console] You did not enter a selection. What type of terminal are you using? 1) ANSI Standard CRT 2) DEC VT100 3) PC Console 4) Sun Command Tool 5) Sun Workstation 6) X Terminal Emulator (xterms) 7) Other Type the number of your choice and press Return: 2
Es ist sehr zu empfehlen für die Konfiguration ein VT100 Terminal zu nehmen. Das ich zwar nicht schön, aber man kann auj jeder Konsole ordentlich arbeiten, ohne das was verschoben wird.
Ich bin aus Bequemlichkeitsgründen auf wordpress umgestiegen. Ich muss aber sagen der Editor ist echt grausam. Da er mir stellenweise <p>-Tags eingefügt hat, welche ich nicht wollte. Es gibt ein Plugin, welches einen besseren Editor zur Verfügung stellt: TinyMCE Advanced. Damit konnte ich die Fehler im html ausbessern. Unter Einstellungen hat man dann noch eine weitere Registerkarte zum konfigurieren.
Für manche Dinge wie nfs ist es wichtig eine korrekte Uhrzeit auf allen Rechnern zu haben. Dies kann man durch die Sychronisation mit einem Zeit-Server erreichen. Unter Open Solaris müssen in der Datei /etc/inet/ntp.conf die Zeitserver stehen mit den man sich synchronisieren möchte. Anschließend muss man den ntp-Server neu starten. Unten steht meine Konfiguration:
root@walhalla ~ $ cat /etc/inet/ntp.conf server 0.pool.ntp.org server 1.pool.ntp.org server 2.pool.ntp.org server 3.pool.ntp.org root@walhalla ~ $ svcadm restart svc:/network/ntp:default root@walhalla ~ $ ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== +wikisquare.de 129.69.1.153 2 u 58 64 377 28.259 -20.970 2.549 *dexter.wzw.tum. 130.149.17.21 2 u 63 64 377 13.108 -17.224 1.370 +dnscache-frankf 131.188.3.222 2 u 56 64 377 25.993 -20.031 2.900 -draco.fivemile. 192.53.103.108 2 u 63 64 377 20.565 -15.292 1.181
Hier findet man noch einige Information über die verwendeten Zeitserver.
Ich sitze dummerweise hinter einem Proxyserver. Als ich ein Repository auschecken wollte hat sich sehr lange nichts getan. Bis ich auf die zündete Idee gekommen bin, dass es vielleicht am Proxy liegt. Einen Proxyserver kann man global in der Datei /etc/subversion/servers oder im Home .subversion konfigurieren
[global] http-proxy-host=proxyhost http-proxy-port=3128
Bei den meisten Linux-Distributionen ist das nicht nötig, aber bei (Open) Solaris