{"id":8842,"date":"2013-11-29T20:29:38","date_gmt":"2013-11-29T19:29:38","guid":{"rendered":"http:\/\/tuxproject.de\/blog\/?p=8842"},"modified":"2019-05-23T11:35:07","modified_gmt":"2019-05-23T09:35:07","slug":"mkdir-wundern-sprengen","status":"publish","type":"post","link":"https:\/\/tuxproject.de\/blog\/2013\/11\/mkdir-wundern-sprengen\/","title":{"rendered":"mkdir * ; wun\u00addern ; spren\u00adgen"},"content":{"rendered":"<p>Ich bin seit einer Wei\u00adle in einer die\u00adser <em>start-up<\/em>-Fir\u00admen t\u00e4tig, die <em>irgend\u00adwas mit mobi\u00adlen Anwen\u00addun\u00adgen<\/em> machen. Urspr\u00fcng\u00adlich soll\u00adte ich dort die Backend\u00adent\u00adwick\u00adlung \u00fcber\u00adneh\u00admen; bl\u00f6\u00adder\u00adwei\u00adse hat\u00adte ich in mei\u00adner Bewer\u00adbung ange\u00adge\u00adben, dass ich auch schon mal einen Ser\u00adver gewar\u00adtet habe, was dazu f\u00fchr\u00adte, dass man mir au\u00dfer\u00addem die Instal\u00adla\u00adti\u00adon und War\u00adtung eines Ser\u00advers (in Form eines aus\u00adran\u00adgier\u00adten Mini-Towers) auf\u00adtrug. Kein Pro\u00adblem, dach\u00adte ich, macht ja durch\u00adaus Spa\u00df. (Dass die Fir\u00adma aus\u00adnahms\u00adlos auf eine Mac-OS-X-Umge\u00adbung setzt, h\u00e4t\u00adte mich schon stut\u00adzig machen sol\u00adlen.)<\/p>\n<p>Nach eini\u00adgen Stun\u00adden war der aus\u00adran\u00adgier\u00adte Mini-Tower zu einem voll funk\u00adti\u00adons\u00adt\u00fcch\u00adti\u00adgen Free\u00adBSD-PHP-Ent\u00adwick\u00adlungs\u00adser\u00adver her\u00adan\u00adge\u00adreift, der genau das tat, was er soll\u00adte, regel\u00adm\u00e4\u00ad\u00dfi\u00adge Daten\u00adbank- und Web\u00adser\u00adver-Back\u00adups per <tt>rsync<\/tt> (also auf ein belie\u00adbi\u00adges Netz\u00adlauf\u00adwerk) inklu\u00adsi\u00adve. Die\u00adser Ser\u00adver ver\u00adrich\u00adte\u00adte anstands\u00adlos sei\u00adnen Dienst und \u00fcber\u00adstand auch gr\u00f6\u00ad\u00dfe\u00adre <em>updates<\/em> ohne Pro\u00adble\u00adme, wie man es eben von Free\u00adBSD so kennt.<\/p>\n<p>Trotz all\u00addem gab es sei\u00adtens der Ent\u00adschei\u00adder (zwar kei\u00adne \u201eSchlip\u00adsis\u201c, aber doch sehr \u00f6ko\u00adno\u00admisch den\u00adkend) vier Punk\u00adte an der Instal\u00adla\u00adti\u00adon zu kri\u00adti\u00adsie\u00adren: Free\u00adBSD las\u00adse sich nicht ohne Hand\u00adar\u00adbeit in die sowie\u00adso her\u00adum\u00adste\u00adhen\u00adde \u201eTime Machi\u00adne\u201c (so ein app\u00adle\u00adei\u00adge\u00adnes Back\u00adup\u00adsy\u00adstem) ein\u00adbin\u00adden, was immens wich\u00adtig sei, falls mal die Fest\u00adplat\u00adte \u201eabrau\u00adche\u201c (ein <tt>rsync<\/tt>-Back\u00adup erfor\u00adde\u00adre ja manu\u00adel\u00adles Zur\u00fcck\u00adspie\u00adlen der Datei\u00aden, das sei <em>viel zu umst\u00e4nd\u00adlich<\/em>); es sei eher bl\u00f6d, wenn ich als Ein\u00adzi\u00adger im Haus wis\u00adse, wie man den Ser\u00adver wie\u00adder zum Lau\u00adfen bekom\u00adme, wenn er mal strei\u00adken soll\u00adte (ich war bis dahin ernst\u00adhaft der Mei\u00adnung, genau daf\u00fcr sei\u00aden Admi\u00adni\u00adstra\u00adto\u00adren ja da); man k\u00f6n\u00adne auf Free\u00adBSD (ich hat\u00adte kein GUI instal\u00adliert) nicht so ein\u00adfach neue vir\u00adtu\u00adel\u00adle Hosts anle\u00adgen wie unter Mac OS X, wo ein ein\u00adzi\u00adger Klick gen\u00fc\u00adge; im \u00dcbri\u00adgen pas\u00adse der Mini\u00adtower nicht in den \u201eSer\u00adver\u00adschrank\u201c (die Anf\u00fch\u00adrungs\u00adzei\u00adchen sind ernst gemeint; in die\u00adsem \u201eSer\u00adver\u00adschrank\u201c ste\u00adhen vor allem Mac minis her\u00adum), son\u00addern m\u00fcs\u00adse dane\u00adben\u00adge\u00adstellt wer\u00adden, was nat\u00fcr\u00adlich unzu\u00admut\u00adbar sei.<\/p>\n<p>Die \u201eL\u00f6sung\u201c f\u00fcr die\u00adse Her\u00adaus\u00adfor\u00adde\u00adrun\u00adgen: Ein wei\u00adte\u00adrer Mac mini wur\u00adde ange\u00adschafft und dem Zust\u00e4n\u00addi\u00adgen (mir) kurz erkl\u00e4rt, wie das Teil denn funk\u00adtio\u00adniert, wie man also per Klick neue Web\u00adsei\u00adten hin\u00adzu\u00adf\u00fcgt (was offen\u00adbar nichts ande\u00adres ist als ein GUI zur Ver\u00adwal\u00adtung von vir\u00adtu\u00adel\u00adlen Hosts im mit\u00adge\u00adlie\u00adfer\u00adten Apa\u00adche), sogar mit \u201eh\u00fcb\u00adscher\u201c blau\u00ader <em>check\u00adbox<\/em> zum An- und Abschal\u00adten von PHP (nat\u00fcr\u00adlich in einer Uralt\u00adver\u00adsi\u00adon; wer will schon aktu\u00adel\u00adle Soft\u00adware auf \u2019nem Ser\u00adver nut\u00adzen? Mac-OS-Nut\u00adzer jeden\u00adfalls nicht). \u201eDann mal viel Spa\u00df!\u201c<\/p>\n<p>Was ich per Ver\u00adsuch und Irr\u00adtum schnell her\u00adaus\u00adfand: Das GUI f\u00fcr die Ser\u00adver\u00adwar\u00adtung in Mac OS X scheint tat\u00ads\u00e4ch\u00adlich einen gewis\u00adsen Zweck zu erf\u00fcl\u00adlen. Eine <tt>httpd.conf<\/tt> exi\u00adstiert zwar dort, wo man sie erwar\u00adten w\u00fcr\u00adde (es gibt tat\u00ads\u00e4ch\u00adlich ein Kon\u00adfi\u00adgu\u00adra\u00adti\u00adons\u00adver\u00adzeich\u00adnis namens <tt>apache2<\/tt>), aber sie scheint f\u00fcr irgend\u00adwas ande\u00adres benutzt zu wer\u00adden. Das (mit\u00adtels <a href=\"http:\/\/brew.sh\/index_de.html\">home\u00adbrew<\/a>; ein pas\u00adsen\u00adder Name, denn die Benut\u00adzung macht Lust auf ein Bier) h\u00e4n\u00addisch nach\u00adin\u00adstal\u00adlier\u00adte PHP 5.5 lie\u00df sich \u00fcber sie jeden\u00adfalls nicht akti\u00advie\u00adren. \u201eMein\u201c Pro\u00adjekt setzt im \u00dcbri\u00adgen auf MariaDB (also MySQL-Syn\u00adtax) auf, Mac OS X bringt <em>nat\u00fcr\u00adlich<\/em> nur Post\u00adgreS\u00adQL mit (<em>selbst\u00adver\u00adst\u00e4nd\u00adlich<\/em> ohne GUI, das w\u00e4re ver\u00admut\u00adlich zu ein\u00adfach); auch hier war also Hand\u00adar\u00adbeit n\u00f6tig. Ob das eben\u00adfalls per <tt>brew<\/tt> ein\u00adge\u00adrich\u00adte\u00adte MariaDB kor\u00adrekt mit dem Web\u00adser\u00adver zusam\u00admen\u00adar\u00adbei\u00adtet, ist mehr oder weni\u00adger ein Rate\u00adspiel, da ich noch nicht her\u00adaus\u00adge\u00adfun\u00adden habe, wie ich an \u201emei\u00adne\u201c PHP-Instal\u00adla\u00adti\u00adon kom\u00adme. Das \u201ePHP\u201c-H\u00e4kchen schal\u00adtet ja nur die wo auch immer ver\u00adsteck\u00adte <tt>httpd.conf<\/tt> um, nicht die, die dort liegt, wo sie lie\u00adgen soll\u00adte. Toll, so\u2019n Mac. (Es sieht aber gut aus: Die Instal\u00adla\u00adti\u00adon von <a href=\"http:\/\/adminer.org\">Admi\u00adner<\/a> im Ord\u00adner der Web\u00adsite \u201eDefault\u201c lie\u00df mich zumin\u00addest auf die Daten\u00adbank zugrei\u00adfen, <tt>mysqlad\u00admin<\/tt> ver\u00adrich\u00adtet auf der Kon\u00adso\u00adle auch anstands\u00adlos sei\u00adnen Dienst. Gl\u00fcck gehabt!)<\/p>\n<p>Die Soft\u00adware war zumin\u00addest theo\u00adre\u00adtisch erst mal instal\u00adliert. Jetzt galt es das bestehen\u00adde PHP-Pro\u00adjekt vom \u201ealten\u201c auf den \u201eneu\u00aden\u201c Ser\u00adver zu migrie\u00adren. Die Benut\u00adzung von <tt>scp<\/tt> bot sich an. <em>Nat\u00fcr\u00adlich<\/em> lie\u00adgen Mac-OS-X-Web\u00adsites nicht in <tt>\/var\/www<\/tt> oder irgend\u00adwo inner\u00adhalb von <tt>\/usr<\/tt> oder <tt>\/etc<\/tt>, son\u00addern in einem merk\u00adw\u00fcr\u00addi\u00adgen Son\u00adder\u00adord\u00adner namens <tt>\/Library<\/tt> (und auch nicht unter <tt>\/Library\/WebServer<\/tt>, was eben\u00adfalls exi\u00adstiert, son\u00addern unter <tt>\/Library\/Server<\/tt>), man will es Nicht-Mac-Nut\u00adzern ja nicht zu leicht machen, von BSD auf Mac OS X zu wech\u00adseln. Da k\u00f6nn\u00adte ja jeder kom\u00admen! Inso\u00adfern ist es nur kon\u00adse\u00adquent, dass Mac OS X nicht die <tt>tcsh<\/tt>, son\u00addern die <tt>bash<\/tt> als Stan\u00addardshell ver\u00adwen\u00addet. Die <tt>bash<\/tt> ver\u00adh\u00e4lt sich aber gele\u00adgent\u00adlich so, wie man es am Wenig\u00adsten erwar\u00adten w\u00fcr\u00adde (was einer der Gr\u00fcn\u00adde sein k\u00f6nn\u00adte, war\u00adum sie unter Linux so beliebt ist).<\/p>\n<p>Ein Bei\u00adspiel: Was, denkt ihr, tut fol\u00adgen\u00adder Befehl in einer Mac-OS-X-Shell?<\/p>\n<pre lang=\"bash\">scp -r root@bsdserver:\/var\/www\/projekt\/* .\/*<\/pre>\n<p>Der <em>gesun\u00adde Men\u00adschen\u00adver\u00adstand<\/em> sieht, dass <tt>.\/*<\/tt> <em>eigent\u00adlich<\/em> red\u00adun\u00addant ist und <tt>.<\/tt> gen\u00fc\u00adgen soll\u00adte, hat aber anson\u00adsten kei\u00adne wei\u00adte\u00adren Ein\u00adw\u00e4n\u00adde. Die <tt>bash<\/tt> sieht das mit dem <a href=\"http:\/\/www.proftpd.de\/HowTo-Globbing.41.0.html\">Glob\u00adbing<\/a> aber anders als der gesun\u00adde Men\u00adschen\u00adver\u00adstand. Obi\u00adger Befehl kopiert also rekur\u00adsiv (<tt>-r<\/tt>) den Inhalt von <tt>\/var\/www\/projekt<\/tt> auf dem BSD-Ser\u00adver in das aktu\u00adel\u00adle Ver\u00adzeich\u00adnis \u2013 und zwar in einen Unter\u00adord\u00adner namens <tt>*<\/tt>, den er hier\u00adf\u00fcr extra anlegt.<\/p>\n<p>Oh, jetzt habe ich vor Schreck die Beto\u00adnung ver\u00adges\u00adsen: In einen <b>Unter\u00adord\u00adner namens <tt>*<\/tt><\/b>! (F\u00fcr die weni\u00adger Tech\u00adnik\u00adver\u00adsier\u00adten: Das ist, als w\u00fcr\u00adde man sein Kind \u201eLeer\u00adzei\u00adchen\u201c nen\u00adnen. Oder \u201eJeder\u201c.)<\/p>\n<p>Wie besei\u00adtigt man die\u00adses Mal\u00adheur? Erst mal alles einen Ord\u00adner h\u00f6her kopie\u00adren, dann den Ord\u00adner namens <tt>*<\/tt> ent\u00adfer\u00adnen:<\/p>\n<pre lang=\"bash\">cd \"*\"; cp -R * ..; cd ..; rm -rf \"*\"<\/pre>\n<p>Fie\u00adse Fal\u00adle: <tt>rm \u2011rf *<\/tt> w\u00fcr\u00adde auch funk\u00adtio\u00adnie\u00adren, aber anders als gew\u00fcnscht.<\/p>\n<p>Mac OS X \u00fcber\u00adrascht mich immer wie\u00adder. <a href=\"http:\/\/geeknizer.com\/apples-adjectives-are-amazing-awesome-incredible-beautiful-unbelievable-easy-really-nice\/\">Incre\u00addi\u00adble!<\/a><\/p>\n<p>Zum Gl\u00fcck ist Wochen\u00aden\u00adde.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ich bin seit einer Wei\u00adle in einer die\u00adser start-up-Fir\u00ad\u00admen t\u00e4tig, die irgend\u00adwas mit mobi\u00adlen Anwen\u00addun\u00adgen machen. Urspr\u00fcng\u00adlich soll\u00adte ich dort die Backend\u00adent\u00adwick\u00adlung \u00fcber\u00adneh\u00admen; bl\u00f6\u00adder\u00adwei\u00adse hat\u00adte ich in mei\u00adner Bewer\u00adbung ange\u00adge\u00adben, dass ich auch schon mal einen Ser\u00adver gewar\u00adtet habe, was dazu f\u00fchr\u00adte, dass man mir au\u00dfer\u00addem die Instal\u00adla\u00adti\u00adon und War\u00adtung eines Ser\u00advers (in Form eines \u2026<\/p>\n<p><a href=\"https:\/\/tuxproject.de\/blog\/2013\/11\/mkdir-wundern-sprengen\/\" class=\"more-link\">\u2018mkdir * ; wun\u00addern ; spren\u00adgen\u2019 wei\u00adter\u00adle\u00adsen \u00bb<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"wp_typography_post_enhancements_disabled":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":3,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":""},"categories":[1,19],"tags":[],"series":[],"class_list":["post-8842","post","type-post","status-publish","format-standard","hentry","category-persoenliches","category-nerdkrams"],"share_on_mastodon":{"url":"","error":""},"wp-worthy-pixel":{"ignored":false,"public":null,"server":null,"url":null},"wp-worthy-type":"normal","_links":{"self":[{"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/posts\/8842","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/comments?post=8842"}],"version-history":[{"count":0,"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/posts\/8842\/revisions"}],"wp:attachment":[{"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/media?parent=8842"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/categories?post=8842"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/tags?post=8842"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/series?post=8842"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}