{"id":1076,"date":"2019-03-25T18:27:24","date_gmt":"2019-03-25T17:27:24","guid":{"rendered":"http:\/\/www.fotoandnet.de\/wp\/?p=1076"},"modified":"2019-03-26T08:29:01","modified_gmt":"2019-03-26T07:29:01","slug":"glusterfs-auf-odroid-hc2","status":"publish","type":"post","link":"http:\/\/www.fotoandnet.de\/wp\/?p=1076","title":{"rendered":"Linux Arch Installation auf den SDS Odroid-HC2 Nodes"},"content":{"rendered":"\n<p>Nachdem das PowerSupply und das Chassis f\u00fcr die Odroid-HC2 Bricks fertig ist, habe ich mich jetzt dem Software Defined Storage selbst zugewendet. Beim Formatieren der 10 microSD Karten viel mir sofort auf, das ist ein Anwendungsfall f\u00fcr eine Automatisierung. Leider ist das Installieren bis zum Aufsatzpunkt einer Automatisierung sehr Zeit intensiv.<\/p>\n\n\n\n<ul class=\"wp-block-gallery columns-1 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\"><li class=\"blocks-gallery-item\"><figure><a href=\"http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2019\/03\/20190325_175325-e1553549286591-1024x422.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"422\" src=\"http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2019\/03\/20190325_175325-e1553549286591-1024x422.jpg\" alt=\"\" data-id=\"1131\" data-link=\"http:\/\/www.fotoandnet.de\/wp\/?attachment_id=1131\" class=\"wp-image-1131\" srcset=\"http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2019\/03\/20190325_175325-e1553549286591-1024x422.jpg 1024w, http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2019\/03\/20190325_175325-e1553549286591-300x124.jpg 300w, http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2019\/03\/20190325_175325-e1553549286591-768x317.jpg 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><\/li><\/ul>\n\n\n\n<p>Also fange ich mal an 10 microSD Karten platt zu machen, damit sie jungfr\u00e4ulich an den Start gehen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[eric@Wintermute ~]$ sudo dd if=\/dev\/zero of=\/dev\/mmcblk0 bs=1M count=8\n8+0 Datens\u00e4tze ein\n8+0 Datens\u00e4tze aus\n8388608 bytes (8,4 MB, 8,0 MiB) copied, 0,131692 s, 63,7 MB\/s\n[eric@Wintermute ~]$ sync<\/code><\/pre>\n\n\n\n<p>Als n\u00e4chstes hole ich mir ein Linux Arch Image f\u00fcr die kleinen Bricks. Dankenswerterweise hat sich das Team von Arch Linux ARM die M\u00fche gemacht, Images f\u00fcr die Installation von Linux Arch im monitorless Mode zu bauen, so da\u00df ich die Installation nicht von Hand machen muss. Das hat bei Linux Arch immer etwas von Tierqu\u00e4lerei..<\/p>\n\n\n\n<p>Das Image und die genaue Erl\u00e4uterung in englisch findet ihr unter:<\/p>\n\n\n\n<p><a href=\"https:\/\/archlinuxarm.org\/platforms\/armv7\/samsung\/odroid-hc2\">https:\/\/archlinuxarm.org\/platforms\/armv7\/samsung\/odroid-hc2<\/a><\/p>\n\n\n\n<p>Allerdings werde ich die 10 microSD Karten nicht einzeln nach dem Verfahren generieren und dann fertig machen bis Ansible sich einloggen kann. Da sitze ich ja in Tagen noch hier. Ich werde eine microSD Karte fertig machen und diese dann clonen. Also hole ich mir mal ein aktuelles Linux Arch Image f\u00fcr eine Installation ohne Monitor!<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[eric@Wintermute ~]$ wget http:\/\/os.archlinuxarm.org\/os\/ArchLinuxARM-odroid-xu3-latest.tar.gz\n--2019-03-25 19:00:32--  http:\/\/os.archlinuxarm.org\/os\/ArchLinuxARM-odroid-xu3-latest.tar.gz\nAufl\u00f6sen des Hostnamens os.archlinuxarm.org (os.archlinuxarm.org)\u2026 50.116.36.110\nVerbindungsaufbau zu os.archlinuxarm.org (os.archlinuxarm.org)|50.116.36.110|:80 \u2026 verbunden.\nHTTP-Anforderung gesendet, auf Antwort wird gewartet \u2026 302 Found\nPlatz: http:\/\/de4.mirror.archlinuxarm.org\/os\/ArchLinuxARM-odroid-xu3-latest.tar.gz [folgend]\n--2019-03-25 19:00:32--  http:\/\/de4.mirror.archlinuxarm.org\/os\/ArchLinuxARM-odroid-xu3-latest.tar.gz\nAufl\u00f6sen des Hostnamens de4.mirror.archlinuxarm.org (de4.mirror.archlinuxarm.org)\u2026 213.202.193.253\nVerbindungsaufbau zu de4.mirror.archlinuxarm.org (de4.mirror.archlinuxarm.org)|213.202.193.253|:80 \u2026 verbunden.\nHTTP-Anforderung gesendet, auf Antwort wird gewartet \u2026 200 OK\nL\u00e4nge: 405576169 (387M) [application\/octet-stream]\nWird in \u00bbArchLinuxARM-odroid-xu3-latest.tar.gz\u00ab gespeichert.\n\nArchLinuxARM-odroid-xu3-latest.tar.gz 100%[======================================================================&gt;] 386,79M  5,65MB\/s    in 69s      \n\n2019-03-25 19:01:42 (5,59 MB\/s) - \u00bbArchLinuxARM-odroid-xu3-latest.tar.gz\u00ab gespeichert [405576169\/405576169]<\/code><\/pre>\n\n\n\n<p>Jetzt noch flott checken, ob mir da niemand M\u00fcll angedreht hat. F\u00fcr mich reicht da ein md5 check, wer es genauer mag und ganz sicher sein m\u00f6chte, findet auf dem Server auch gpg .tar.gz.sig File zu dem Archiv.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[eric@Wintermute ~]$ wget http:\/\/os.archlinuxarm.org\/os\/ArchLinuxARM-odroid-xu3-latest.tar.gz.md5\n--2019-03-25 19:08:44--  http:\/\/os.archlinuxarm.org\/os\/ArchLinuxARM-odroid-xu3-latest.tar.gz.md5\nAufl\u00f6sen des Hostnamens os.archlinuxarm.org (os.archlinuxarm.org)\u2026 50.116.36.110\nVerbindungsaufbau zu os.archlinuxarm.org (os.archlinuxarm.org)|50.116.36.110|:80 \u2026 verbunden.\nHTTP-Anforderung gesendet, auf Antwort wird gewartet \u2026 302 Found\nPlatz: http:\/\/de6.mirror.archlinuxarm.org\/os\/ArchLinuxARM-odroid-xu3-latest.tar.gz.md5 [folgend]\n--2019-03-25 19:08:44--  http:\/\/de6.mirror.archlinuxarm.org\/os\/ArchLinuxARM-odroid-xu3-latest.tar.gz.md5\nAufl\u00f6sen des Hostnamens de6.mirror.archlinuxarm.org (de6.mirror.archlinuxarm.org)\u2026 2a01:4f8:c17:5ade::f00, 138.201.244.244\nVerbindungsaufbau zu de6.mirror.archlinuxarm.org (de6.mirror.archlinuxarm.org)|2a01:4f8:c17:5ade::f00|:80 \u2026 verbunden.\nHTTP-Anforderung gesendet, auf Antwort wird gewartet \u2026 200 OK\nL\u00e4nge: 72 [application\/octet-stream]\nWird in \u00bbArchLinuxARM-odroid-xu3-latest.tar.gz.md5\u00ab gespeichert.\n\nArchLinuxARM-odroid-xu3-latest.tar.gz 100%[======================================================================&gt;]      72  --.-KB\/s    in 0s      \n\n2019-03-25 19:08:44 (4,79 MB\/s) - \u00bbArchLinuxARM-odroid-xu3-latest.tar.gz.md5\u00ab gespeichert [72\/72]<\/code><\/pre>\n\n\n\n<p>Jetzt noch eben md5sum gegen das Archiv laufen lassen und auf ein OK warten.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[eric@Wintermute ~]$ md5sum -c ArchLinuxARM-odroid-xu3-latest.tar.gz.md5\nArchLinuxARM-odroid-xu3-latest.tar.gz: OK\n[eric@Wintermute ~]$ <\/code><\/pre>\n\n\n\n<p>Md5sum hat den gepackten Tarball f\u00fcr verdaulich erachtet. Es kann also weiter gehen mit der Installation auf einer microSD Karte. Diese werde ich dann wie gesagt clonen. <\/p>\n\n\n\n<p>Ich richte mich dabei nach der orginalen Anleitung, auf der oben verlinkten Website. Dann formatiere ich also mal die microSD Karte.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[eric@Wintermute ~]$ sudo fdisk \/dev\/mmcblk0\n\nWillkommen bei fdisk (util-linux 2.33.1).\n\u00c4nderungen werden vorerst nur im Speicher vorgenommen, bis Sie sich\nentscheiden, sie zu schreiben.\nSeien Sie vorsichtig, bevor Sie den Schreibbefehl anwenden.\n\nGer\u00e4t enth\u00e4lt keine erkennbare Partitionstabelle.\nEine neue DOS-Festplattenbezeichnung 0x5c6a4f4f wurde erstellt.\n\nBefehl (m f\u00fcr Hilfe): o\nEine neue DOS-Festplattenbezeichnung 0xf4792cc4 wurde erstellt.\n\nBefehl (m f\u00fcr Hilfe): p\nFestplatte \/dev\/mmcblk0: 14,9 GiB, 15931539456 Bytes, 31116288 Sektoren\nEinheiten: Sektoren von 1 * 512 = 512 Bytes\nSektorgr\u00f6\u00dfe (logisch\/physikalisch): 512 Bytes \/ 512 Bytes\nE\/A-Gr\u00f6\u00dfe (minimal\/optimal): 512 Bytes \/ 512 Bytes\nFestplattenbezeichnungstyp: dos\nFestplattenbezeichner: 0xf4792cc4\n\nBefehl (m f\u00fcr Hilfe): n\nPartitionstyp\n   p   Prim\u00e4r (0 prim\u00e4r, 0 erweitert, 4 frei)\n   e   Erweitert (Container f\u00fcr logische Partitionen)\nW\u00e4hlen (Vorgabe p): p\nPartitionsnummer (1-4, Vorgabe 1): 1\nErster Sektor (2048-31116287, Vorgabe 2048): 4096\nLast sector, +\/-sectors or +\/-size{K,M,G,T,P} (4096-31116287, Vorgabe 31116287): \n\nEine neue Partition 1 des Typs \u201eLinux\u201c und der Gr\u00f6\u00dfe 14,9 GiB wurde erstellt.\n\nBefehl (m f\u00fcr Hilfe): w\nDie Partitionstabelle wurde ver\u00e4ndert.\nioctl() wird aufgerufen, um die Partitionstabelle neu einzulesen.\nFestplatten werden synchronisiert.\n\n[eric@Wintermute ~]$ <\/code><\/pre>\n\n\n\n<p>Sehen wir uns das mal genauer an, was FDisk da draus gemacht hat. Meine Erwartung ist ein nicht gemountet Blockdevice unter \/dev\/mmcblk0 mit einer Partition unter \/dev\/mmcblk0p1.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[eric@Wintermute ~]$ lsblk -TJ \/dev\/mmcblk0\n{\n   \"blockdevices\": [\n      {\"name\":\"mmcblk0\", \"maj:min\":\"179:0\", \"rm\":false, \"size\":\"14,9G\", \"ro\":false, \"type\":\"disk\", \"mountpoint\":null,\n         \"children\": [\n            {\"name\":\"mmcblk0p1\", \"maj:min\":\"179:1\", \"rm\":false, \"size\":\"14,9G\", \"ro\":false, \"type\":\"part\", \"mountpoint\":null}\n         ]\n      }\n   ]\n}<\/code><\/pre>\n\n\n\n<p>Schaut soweit gut aus, die Partition ist genau da, wo ich sie erwartet habe. Dann geht es jetzt daran ein Filesystem auf der Partition zu installieren. Nach der Anleitung wird es ein ext4fs, womit ich f\u00fcr &#8222;\/&#8220; leben kann. Allerdings arbeite ich pers\u00f6nlich lieber mit Labeln bei den Partitionen anstelle ihrer Position im \/dev Baum. Meine Root Partion bekommt folglich auch das Label ROOT.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[eric@Wintermute ~]$ sudo mkfs.ext4 -v \/dev\/mmcblk0p1 -L ROOT\nmke2fs 1.45.0 (6-Mar-2019)\nDateisystemtypen f\u00fcr das Aufschl\u00fcsseln von mke2fs.conf: 'ext4'\nGer\u00e4tebl\u00f6cke werden verworfen: erledigt                        \nDateisystembezeichnung=ROOT\nOS-Typ: Linux\nBlockgr\u00f6\u00dfe=4096 (log=2)\nFragmentgr\u00f6\u00dfe=4096 (log=2)\nStride=0 Bl\u00f6cke, Stripebreite=0 Bl\u00f6cke\n972944 Inodes, 3889024 Bl\u00f6cke\n194451 Bl\u00f6cke (5.00%) reserviert f\u00fcr den Superuser\nErster Datenblock=0\nMaximale Dateisystem-Bl\u00f6cke=2151677952\n119 Blockgruppen\n32768 Bl\u00f6cke pro Gruppe, 32768 Fragmente pro Gruppe\n8176 Inodes pro Gruppe\nUUID des Dateisystems: 5ab9cbdc-0a5f-4fe8-8910-afdda9eafb81\nSuperblock-Sicherungskopien gespeichert in den Bl\u00f6cken: \n        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208\n\nbeim Anfordern von Speicher f\u00fcr die Gruppentabellen: erledigt                        \nInode-Tabellen werden geschrieben: erledigt                        \nDas Journal (16384 Bl\u00f6cke) wird angelegt: erledigt\nDie Superbl\u00f6cke und die Informationen \u00fcber die Dateisystemnutzung werden\ngeschrieben: erledigt\n\n[eric@Wintermute ~]$ <\/code><\/pre>\n\n\n\n<p> Na das lief doch wie gew\u00fcnscht gut durch, es gibt jetzt also auf \/dev\/mmcblk0 eine Partition \/dev\/mmcblk0p1 mit ext4 Filesystem. Dann mounten wir die mal ins bestehende Filesystem hinein, um Daten darauf schreiben zu  k\u00f6nnen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[eric@Wintermute ~]$ mkdir root\n[eric@Wintermute ~]$ sudo mount \/dev\/mmcblk0p1 root<\/code><\/pre>\n\n\n\n<p>Ist ohne Wiederworte eingeh\u00e4ngt. Jetzt kommt der Teil mit dem Daten aus dem gezippten Tarball auspacken. Dabei ist es wichtig wirklich ROOT zu sein, ein sudo hilft hier nicht.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[eric@Wintermute ~]$ su\nPasswort: ALIGATOR3 \n\nroot@Wintermute eric]# bsdtar -vxpf ArchLinuxARM-odroid-xu3-latest.tar.gz -C root\nx .\/bin\nx .\/boot\/\nx .\/boot\/tzsw.bin\nx .\/boot\/dtbs\/\nx .\/boot\/initramfs-linux.img\nx .\/boot\/sd_fusing.sh\nx .\/boot\/mkscr\nx .\/boot\/boot.txt\nx .\/boot\/zImage\nx .\/boot\/u-boot.bin\nx .\/boot\/bl2.bin\n&lt;snip&gt;\nx .\/var\/db\/nscd\/\nx .\/var\/db\/Makefile\nx .\/var\/log\/lastlog\nx .\/var\/log\/wtmp\nx .\/var\/log\/journal\/\nx .\/var\/log\/audit\/\nx .\/var\/log\/btmp\nx .\/var\/log\/private\/\nx .\/var\/log\/old\/\nx .\/var\/log\/journal\/remote\/\n[root@Wintermute eric]# <\/code><\/pre>\n\n\n\n<p>Nicht erschrecken, wenn du das selber machst, aus dem Tarball plumpst ein ganzes Linuxsystem raus. \ud83d\ude42<\/p>\n\n\n\n<p>Damit der Odroid-HC2 von der microSD Karte booten kann, ist noch etwas Bootcode im Bootsektor der microSD Karte notwendig. Den schaufeln wir da per mitgeliefertem Script hin.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[root@Wintermute eric]# cd root\n[root@Wintermute root]# cd boot\n\n[root@Wintermute boot]# pwd\n\/home\/eric\/root\/boot\n\n[root@Wintermute boot]# sh sd_fusing.sh \/dev\/mmcblk0\n\/dev\/mmcblk0 reader is identified.\nBL1 fusing\n30+0 Datens\u00e4tze ein\n30+0 Datens\u00e4tze aus\n15360 bytes (15 kB, 15 KiB) copied, 0,0379681 s, 405 kB\/s\nBL2 fusing\n28+1 Datens\u00e4tze ein\n28+1 Datens\u00e4tze aus\n14592 bytes (15 kB, 14 KiB) copied, 0,111764 s, 131 kB\/s\nu-boot fusing\n1123+1 Datens\u00e4tze ein\n1123+1 Datens\u00e4tze aus\n575173 bytes (575 kB, 562 KiB) copied, 1,65022 s, 349 kB\/s\nTrustZone S\/W fusing\n512+0 Datens\u00e4tze ein\n512+0 Datens\u00e4tze aus\n262144 bytes (262 kB, 256 KiB) copied, 0,574115 s, 457 kB\/s\nU-boot image is fused successfully.\n[root@Wintermute boot]# <\/code><\/pre>\n\n\n\n<p>Selbst nach etlichen Jahren mit Linux mag ich so ein Bootcode rumgeschraube nicht wirklich..<\/p>\n\n\n\n<p>Nach dem Bootcode \u00dcbertragen ist das Linux Arch auf der microSD Karte drauf und ich nehme sie wieder aus dem Filesystem raus.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[root@Wintermute boot]# cd ..\/..\n[root@Wintermute eric]# pwd\n\/home\/eric\n[root@Wintermute eric]# umount root\n[root@Wintermute eric]# rmdir root\n[root@Wintermute eric]# <\/code><\/pre>\n\n\n\n<p>Noch ein letzter pr\u00fcfender Blick auf die microSD Karte.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[root@Wintermute eric]# lsblk -f \/dev\/mmcblk0\nNAME        FSTYPE LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINT\nmmcblk0                                                                      \n\u2514\u2500mmcblk0p1 ext4   ROOT  5ab9cbdc-0a5f-4fe8-8910-afdda9eafb81                \n[root@Wintermute eric]# <\/code><\/pre>\n\n\n\n<p>Es sieht gut aus und die microSD Karte kann in einen Odroid-HC2, um dann das Linux Arch von der Karte das erstemal zu Booten und dem System alle notwendigen Pakete f\u00fcr eine weiteres Setup mit Ansible zu verpassen.<\/p>\n\n\n\n<p>Nachdem das Lampenspiel an dem Odroid-HC2 darauf schlie\u00dfen liess, das er online ist, habe ich auf meinem DHCP Server mal nachgesehen und tats\u00e4chlich, da ist eine 192.168.2.146 aufgetaucht. Eine kurze Kontrolle, ob die IPv4 Adresse auch lebt.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[root@Wintermute eric]# ping 192.168.2.146\nPING 192.168.2.146 (192.168.2.146) 56(84) bytes of data.\n64 bytes from 192.168.2.146: icmp_seq=1 ttl=64 time=1.44 ms\n64 bytes from 192.168.2.146: icmp_seq=2 ttl=64 time=0.566 ms\n64 bytes from 192.168.2.146: icmp_seq=3 ttl=64 time=0.733 ms\n64 bytes from 192.168.2.146: icmp_seq=4 ttl=64 time=0.619 ms\n^X^C\n--- 192.168.2.146 ping statistics ---\n4 packets transmitted, 4 received, 0% packet loss, time 24ms\nrtt min\/avg\/max\/mdev = 0.566\/0.840\/1.442\/0.352 ms\n[root@Wintermute eric]# <\/code><\/pre>\n\n\n\n<p>Es scheint dem Odroid-HC2 gut zu gehen, zumindest antwortet jemand auf das Geklopfe an der Netzwerkkarte. Laut Anleitung ist er per SSH unter dem User alarm, mit dem Passwort alarm erreichbar. Pr\u00fcfen wir das mal und sehen auch gleich mal nach der Linux Version und den CPU Kernen des Odroid-HC2.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[root@Wintermute eric]# ssh -l alarm 192.168.2.146\nalarm@192.168.2.146's password: alarm\n\n[alarm@alarm ~]$ cat \/proc\/version\nLinux version 4.14.102-1-ARCH (builduser@leming) (gcc version 8.2.1 20181127 (GCC)) #1 SMP PREEMPT Sat Feb 23 19:59:09 UTC 2019\n\n[alarm@alarm ~]$ cat \/proc\/cpuinfo \nprocessor       : 0\nmodel name      : ARMv7 Processor rev 3 (v7l)\nBogoMIPS        : 90.00\nFeatures        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae \nCPU implementer : 0x41\nCPU architecture: 7\nCPU variant     : 0x0\nCPU part        : 0xc07\nCPU revision    : 3\n\nprocessor       : 1\nmodel name      : ARMv7 Processor rev 3 (v7l)\nBogoMIPS        : 90.00\nFeatures        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae \nCPU implementer : 0x41\nCPU architecture: 7\nCPU variant     : 0x0\nCPU part        : 0xc07\nCPU revision    : 3\n\nprocessor       : 2\nmodel name      : ARMv7 Processor rev 3 (v7l)\nBogoMIPS        : 90.00\nFeatures        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae \nCPU implementer : 0x41\nCPU architecture: 7\nCPU variant     : 0x0\nCPU part        : 0xc07\nCPU revision    : 3\n\nprocessor       : 3\nmodel name      : ARMv7 Processor rev 3 (v7l)\nBogoMIPS        : 90.00\nFeatures        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae \nCPU implementer : 0x41\nCPU architecture: 7\nCPU variant     : 0x0\nCPU part        : 0xc07\nCPU revision    : 3\n\nprocessor       : 4\nmodel name      : ARMv7 Processor rev 3 (v7l)\nBogoMIPS        : 120.00\nFeatures        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae \nCPU implementer : 0x41\nCPU architecture: 7\nCPU variant     : 0x2\nCPU part        : 0xc0f\nCPU revision    : 3\n\nprocessor       : 5\nmodel name      : ARMv7 Processor rev 3 (v7l)\nBogoMIPS        : 120.00\nFeatures        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae \nCPU implementer : 0x41\nCPU architecture: 7\nCPU variant     : 0x2\nCPU part        : 0xc0f\nCPU revision    : 3\n\nprocessor       : 6\nmodel name      : ARMv7 Processor rev 3 (v7l)\nBogoMIPS        : 120.00\nFeatures        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae \nCPU implementer : 0x41\nCPU architecture: 7\nCPU variant     : 0x2\nCPU part        : 0xc0f\nCPU revision    : 3\n\nprocessor       : 7\nmodel name      : ARMv7 Processor rev 3 (v7l)\nBogoMIPS        : 120.00\nFeatures        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae \nCPU implementer : 0x41\nCPU architecture: 7\nCPU variant     : 0x2\nCPU part        : 0xc0f\nCPU revision    : 3\n\nHardware        : SAMSUNG EXYNOS (Flattened Device Tree)\nRevision        : 0100\nSerial          : 0000000000000000\n[alarm@alarm ~]$ <\/code><\/pre>\n\n\n\n<p>Es ist schon sehr verbl\u00fcffend, dass dieses kleine Board in dem Odroid-HC2 mit 8 Kernen daher kommt. Eine wirklich sehr potente Plattform!<\/p>\n\n\n\n<p>Weiter geht es mit dem Anlegen und Abgleichen des Pacman Schl\u00fcsselrings, in welchem die Vertrauensw\u00fcrdigkeiten zu den Softwareentwicklern liegen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[alarm@alarm ~]$ pacman-key --init\n==&gt; ERROR: pacman-key needs to be run as root for this operation.\n\n[alarm@alarm ~]$ su\nPassword: root\n\n[root@alarm alarm]# pacman-key --init\ngpg: \/etc\/pacman.d\/gnupg\/trustdb.gpg: trustdb created\ngpg: no ultimately trusted keys found\ngpg: starting migration from earlier GnuPG versions\ngpg: porting secret keys from '\/etc\/pacman.d\/gnupg\/secring.gpg' to gpg-agent\ngpg: migration succeeded\ngpg: Generating pacman keyring master key...\ngpg: key 2AC1C92126FEB3C8 marked as ultimately trusted\ngpg: directory '\/etc\/pacman.d\/gnupg\/openpgp-revocs.d' created\ngpg: revocation certificate stored as '\/etc\/pacman.d\/gnupg\/openpgp-revocs.d\/3189C9A002F783227C42CD222AC1C92126FEB3C8.rev'\ngpg: Done\n==&gt; Updating trust database...\ngpg: marginals needed: 3  completes needed: 1  trust model: pgp\ngpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u\n\n[root@alarm alarm]# pacman-key --populate archlinuxarm\n==&gt; Appending keys from archlinuxarm.gpg...\n==&gt; Locally signing trusted keys in keyring...\n  -&gt; Locally signing key 69DD6C8FD314223E14362848BF7EEF7A9C6B5765...\n  -&gt; Locally signing key 02922214DE8981D14DC2ACABBC704E86B823CD25...\n  -&gt; Locally signing key 9D22B7BB678DC056B1F7723CB55C5315DCD9EE1A...\n==&gt; Importing owner trust values...\ngpg: setting ownertrust to 4\ngpg: inserting ownertrust of 4\ngpg: setting ownertrust to 4\n==&gt; Updating trust database...\ngpg: marginals needed: 3  completes needed: 1  trust model: pgp\ngpg: depth: 0  valid:   1  signed:   3  trust: 0-, 0q, 0n, 0m, 0f, 1u\ngpg: depth: 1  valid:   3  signed:   1  trust: 0-, 0q, 0n, 3m, 0f, 0u\ngpg: depth: 2  valid:   1  signed:   0  trust: 1-, 0q, 0n, 0m, 0f, 0u\n[root@alarm alarm]# <\/code><\/pre>\n\n\n\n<p>Wenn ich schonmal auf dem Odroid-HC2 bin, mache ich auch gleich einen Softwareupdate. Vorweg sei gesagt, dass ich erstaunt bin wie wenig er sich aus dem Repository abholt. Die Images scheinen sehr gut gepflegt zu werden.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[root@alarm alarm]# pacman -Syu\n:: Synchronizing package databases...\n core                                                            215.4 KiB  2.50M\/s 00:00 [####################################################] 100%\n extra                                                             2.2 MiB  5.96M\/s 00:00 [####################################################] 100%\n community                                                         5.1 MiB  4.70M\/s 00:01 [####################################################] 100%\n alarm                                                           117.3 KiB  3.18M\/s 00:00 [####################################################] 100%\n aur                                                               5.2 KiB  0.00B\/s 00:00 [####################################################] 100%\n:: Starting full system upgrade...\nresolving dependencies...\nlooking for conflicting packages...\n\nPackages (15) bash-5.0.002-1  ca-certificates-mozilla-3.43-1  coreutils-8.31-1  e2fsprogs-1.45.0-1  glib2-2.60.0-1  gnupg-2.2.14-1\n              iana-etc-20190308-1  iproute2-5.0.0-1  libgpg-error-1.36-1  libseccomp-2.4.0-1  libssh2-1.8.1-1  linux-firmware-20190313.efd2c1c-1\n              linux-odroid-xu3-4.14.107-1  s-nail-14.9.13-2  texinfo-6.6-1\n\nTotal Download Size:   107.30 MiB\nTotal Installed Size:  559.27 MiB\nNet Upgrade Size:        1.78 MiB\n\n:: Proceed with installation? [Y\/n] \n:: Retrieving packages...\n iana-etc-20190308-1-any                                         \n\n&lt;snip&gt;\n\n==&gt; Creating gzip-compressed initcpio image: \/boot\/initramfs-linux.img\n==&gt; Image generation successful\n(2\/7) Reloading system manager configuration...\n(3\/7) Creating temporary files...\n(4\/7) Reloading device manager configuration...\n(5\/7) Arming ConditionNeedsUpdate...\n(6\/7) Updating the info directory file...\n(7\/7) Rebuilding certificate stores...\n[root@alarm alarm]# <\/code><\/pre>\n\n\n\n<p>Damit Ansible zum Fliegen kommt, ben\u00f6tige ich noch die Pakete Python und Sudo. Welche ich gleich installiere, dabei wird Pacman die Abh\u00e4ngigkeiten automatisch Aufl\u00f6sen und die notwendigen weiteren Pakete selbstst\u00e4ndig nachinstallieren.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[root@alarm alarm]# pacman -S sudo python\nresolving dependencies...\nlooking for conflicting packages...\n\nPackages (3) libnsl-1.2.0-1  python-3.7.2-3  sudo-1.8.27-1\n\nTotal Download Size:    16.42 MiB\nTotal Installed Size:  111.02 MiB\n\n:: Proceed with installation? [Y\/n] \n:: Retrieving packages...\n sudo-1.8.27-1-armv7h                                            715.7 KiB  10.9M\/s 00:00 [####################################################] 100%\n libnsl-1.2.0-1-armv7h                                            51.2 KiB  2.50M\/s 00:00 [####################################################] 100%\n python-3.7.2-3-armv7h                                            15.7 MiB  12.2M\/s 00:01 [####################################################] 100%\n(3\/3) checking keys in keyring                                                            [####################################################] 100%\n(3\/3) checking package integrity                                                          [####################################################] 100%\n(3\/3) loading package files                                                               [####################################################] 100%\n(3\/3) checking for file conflicts                                                         [####################################################] 100%\n(3\/3) checking available disk space                                                       [####################################################] 100%\n:: Processing package changes...\n(1\/3) installing sudo                                                                     [####################################################] 100%\n(2\/3) installing libnsl                                                                   [####################################################] 100%\n(3\/3) installing python                                                                   [####################################################] 100%\nOptional dependencies for python\n    python-setuptools\n    python-pip\n    sqlite [installed]\n    mpdecimal: for decimal\n    xz: for lzma [installed]\n    tk: for tkinter\n:: Running post-transaction hooks...\n(1\/2) Creating temporary files...\n(2\/2) Arming ConditionNeedsUpdate...\n[root@alarm alarm]# <\/code><\/pre>\n\n\n\n<p>Ich pr\u00fcfe lieber nach, was f\u00fcr ein Python da genau installiert wurde. Dabei geht es mir darum, ob es sich um Python2 oder Python3 handelt.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[root@alarm alarm]# ls -la \/usr\/bin\/python*\nlrwxrwxrwx 1 root root    7 Jan 13 15:56 \/usr\/bin\/python -&gt; python3\nlrwxrwxrwx 1 root root   14 Jan 13 15:56 \/usr\/bin\/python-config -&gt; python3-config\nlrwxrwxrwx 1 root root    9 Jan 13 15:56 \/usr\/bin\/python3 -&gt; python3.7\nlrwxrwxrwx 1 root root   16 Jan 13 15:56 \/usr\/bin\/python3-config -&gt; python3.7-config\n-rwxr-xr-x 2 root root 5540 Jan 13 15:56 \/usr\/bin\/python3.7\nlrwxrwxrwx 1 root root   17 Jan 13 15:56 \/usr\/bin\/python3.7-config -&gt; python3.7m-config\n-rwxr-xr-x 2 root root 5540 Jan 13 15:56 \/usr\/bin\/python3.7m\n-rwxr-xr-x 1 root root 3180 Jan 13 15:56 \/usr\/bin\/python3.7m-config\n[root@alarm alarm]# <\/code><\/pre>\n\n\n\n<p>Sehr sch\u00f6n, es ist ein aktuelles Python3 geworden, was mich beruhigt &#8211; denn ich mag einem neuen System auch gerne ein frisches Python3. \ud83d\ude09<\/p>\n\n\n\n<p>Damit Ansible auch auf dem System rumfuhrwerken kann, bedarf es eines Users mit sudo-Rechten ohne Passwort abfrage. Ich f\u00fcr meinen Teil nehme gerne den User ansible und verteile den SSH Schl\u00fcssel des Users ansible vom Control Server (master) auf die zu betreuenden Systeme (nodes), aber da gibt es verschiedene Ans\u00e4tze.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[root@alarm alarm]# useradd -m -g users -s \/bin\/bash ansible\n       \n[root@alarm alarm]# passwd ansible\nNew password: SUPERGEHEIM \nRetype new password: SUPERGEHEIM\n\npasswd: password updated successfully\n[root@alarm alarm]# <\/code><\/pre>\n\n\n\n<p>Okay, f\u00fcr den ein oder anderen stellt sich die Frage wie kriege ich diese SSH-Keys vom Master zu den Nodes. Hier eine kurze Darstellung des Ablaufs auf dem Master, ab der Stelle&#8230; es gibt keinen User ansible auf der Master. \ud83d\ude09<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>eric@barney ~]$ sudo useradd -m -g users -s \/bin\/bash ansible\n[sudo] Passwort f\u00fcr eric: \n\n[eric@barney ~]$ sudo passwd ansible\nGeben Sie ein neues Passwort ein: SUPERGEHEIM \nGeben Sie das neue Passwort erneut ein: SUPERGEHEIM\npasswd: Passwort erfolgreich ge\u00e4ndert\n\n[ansible@barney ~]$ ssh-keygen -t ed25519\nGenerating public\/private ed25519 key pair.\nEnter file in which to save the key (\/home\/ansible\/.ssh\/id_ed25519): \nCreated directory '\/home\/ansible\/.ssh'.\nEnter passphrase (empty for no passphrase): \nEnter same passphrase again: \nYour identification has been saved in \/home\/ansible\/.ssh\/id_ed25519.\nYour public key has been saved in \/home\/ansible\/.ssh\/id_ed25519.pub.\nThe key fingerprint is:\nSHA256:B4A2txMe0ho2TcF0S4gMH3BIxJhvrIjra1JpuWF4WYw ansible@barney\nThe key's randomart image is:\n+--[ED25519 256]--+\n&lt;snip&gt;\n+----[SHA256]-----+\n\n\n[ansible@barney ~]$ ls -la .ssh\/\ninsgesamt 16\ndrwx------ 2 ansible users 4096 25. M\u00e4r 19:58 .\ndrwx------ 3 ansible users 4096 25. M\u00e4r 19:57 ..\n-rw------- 1 ansible users  411 25. M\u00e4r 19:58 id_ed25519\n-rw-r--r-- 1 ansible users   96 25. M\u00e4r 19:58 id_ed25519.pub\n\n[ansible@barney ~]$ ssh-copy-id -i ~\/.ssh\/id_ed25519.pub ansible@192.168.2.146\n\/usr\/bin\/ssh-copy-id: INFO: Source of key(s) to be installed: \"\/home\/ansible\/.ssh\/id_ed25519.pub\"\nThe authenticity of host '192.168.2.146 (192.168.2.146)' can't be established.\nECDSA key fingerprint is SHA256:tatuetata.\nAre you sure you want to continue connecting (yes\/no)? yes\n\/usr\/bin\/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed\n\/usr\/bin\/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys\nansible@192.168.2.146's password: \n\nNumber of key(s) added: 1\n\nNow try logging into the machine, with:   \"ssh 'ansible@192.168.2.146'\"\nand check to make sure that only the key(s) you wanted were added.\n\n[ansible@barney ~]$ ssh ansible@192.168.2.146\n\n[ansible@alarm ~]$ ls -la\ntotal 24\ndrwx------ 3 ansible users 4096 Mar 25 20:01 .\ndrwxr-xr-x 4 root    root  4096 Mar 25 19:50 ..\n-rw-r--r-- 1 ansible users   21 Mar 16 15:27 .bash_logout\n-rw-r--r-- 1 ansible users   57 Mar 16 15:27 .bash_profile\n-rw-r--r-- 1 ansible users  141 Mar 16 15:27 .bashrc\ndrwx------ 2 ansible users 4096 Mar 25 20:01 .ssh\n[ansible@alarm ~]$ <\/code><\/pre>\n\n\n\n<p>Der User ansible kann sich ohne Passwort vom Master im Node, mittels SSH einloggen. Jetzt fehlen nur noch die sudo Rechte f\u00fcr den User ansible, damit der Ansible Master auf dem Node auch \u00c4nderungen am System vornehmen kann.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[ansible@alarm ~]$ su\nPassword: GEHEIM\n\n[root@alarm ansible]# visudo\n\nansible ALL=(ALL) NOPASSWD: ALL\n\n[root@alarm ansible]# visudo -c    \n\/etc\/sudoers: parsed OK\n[root@alarm ansible]#       <\/code><\/pre>\n\n\n\n<p>Wie immer erfolgt danach eine kurze Kontrolle, ob der User sich einloggen und auch tats\u00e4chlich ohne Passwortabfrage sudo ausf\u00fchren darf.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[ansible@barney ~]$ ssh ansible@192.168.2.146\nLast login: Mon Mar 25 20:15:11 2019 from 192.168.2.10\n\n[ansible@alarm ~]$ ls -lah \/root\/\nls: cannot open directory '\/root\/': Permission denied\n\n[ansible@alarm ~]$ sudo ls -lah \/root\/\ntotal 16K\ndrwxr-x---  3 root root 4.0K Mar 25 19:55 .\ndrwxr-xr-x 16 root root 4.0K Mar 25 18:57 ..\n-rw-------  1 root root  305 Mar 25 20:15 .bash_history\ndrwx------  3 root root 4.0K Mar  9 01:57 .gnupg\n[ansible@alarm ~]$ <\/code><\/pre>\n\n\n\n<p>Des gew\u00fcnschte Setup ist erreicht &#8211; JUPIEEE.<\/p>\n\n\n\n<p>Die Replikation von der nun fertigen microSD Karte auf die restlichen neuen Karten kann starten. Fahren wir also sanft unseren ersten Node runter.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[ansible@alarm ~]$ sudo shutdown -P now\nConnection to 192.168.2.146 closed by remote host.\nConnection to 192.168.2.146 closed.\n[ansible@barney ~]$ <\/code><\/pre>\n\n\n\n<p>Anschlie\u00dfend ziehe ich mir von der microSD Karte ein Image mittels dd. Der Ouput beim Image ziehen sieht dann wiefolgt aus.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[root@Wintermute GlusterFS-Image]# sudo dd if=\/dev\/mmcblk0 of=20190325_GlusterFS-Node.img bs=4M status=progress\n8824815616 bytes (8,8 GB, 8,2 GiB) copied, 110 s, 80,2 MB\/s\n[root@Wintermute GlusterFS-Image]#<\/code><\/pre>\n\n\n\n<p>Auf eine leere microSD Karte Schreiben sieht dann auch nicht wesentlich anders aus. Nur dann halt neunmal nach einander.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[root@Wintermute GlusterFS-Image]# sudo dd if=20190325_GlusterFS-Node.img of=\/dev\/mmcblk0 bs=4M status=progress\n4970250240 bytes (5,0 GB, 4,6 GiB) copied, 6 s, 825 MB\/s\n3798+1 Datens\u00e4tze ein\n3798+1 Datens\u00e4tze aus\n15931539456 bytes (16 GB, 15 GiB) copied, 1163,94 s, 13,7 MB\/s\n[root@Wintermute GlusterFS-Image]#<\/code><\/pre>\n\n\n\n<p>Das einzig Bl\u00f6de ist nur, dass diese microSD Karten nicht gerade Raketen beim Schreiben sind. Am Ende dauert es pro microSD Karte ~20Minuten. Zeit etwas Grand Tour zu sehen und nebenbei die ganzen Karten fertig zu machen. Mehr zum Aufsetzen des GlusterFS kommt dann im n\u00e4chsten Beitrag.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nachdem das PowerSupply und das Chassis f\u00fcr die Odroid-HC2 Bricks fertig ist, habe ich mich jetzt dem Software Defined Storage selbst zugewendet. Beim Formatieren der 10 microSD Karten viel mir sofort auf, das ist&#46;&#46;&#46;<\/p>\n","protected":false},"author":2,"featured_media":1131,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[54,53,51],"class_list":["post-1076","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux","tag-initial-setup","tag-linux-arch","tag-odroid-hc2"],"_links":{"self":[{"href":"http:\/\/www.fotoandnet.de\/wp\/index.php?rest_route=\/wp\/v2\/posts\/1076","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.fotoandnet.de\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.fotoandnet.de\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.fotoandnet.de\/wp\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.fotoandnet.de\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1076"}],"version-history":[{"count":64,"href":"http:\/\/www.fotoandnet.de\/wp\/index.php?rest_route=\/wp\/v2\/posts\/1076\/revisions"}],"predecessor-version":[{"id":1148,"href":"http:\/\/www.fotoandnet.de\/wp\/index.php?rest_route=\/wp\/v2\/posts\/1076\/revisions\/1148"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.fotoandnet.de\/wp\/index.php?rest_route=\/wp\/v2\/media\/1131"}],"wp:attachment":[{"href":"http:\/\/www.fotoandnet.de\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1076"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.fotoandnet.de\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1076"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.fotoandnet.de\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1076"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}