bitte um Git-Erläuterung
Hallo zusammen,  

mein Problem: ich installiere einen reinen Ubuntu-Server und will Kivitendo downloaden. Ich denke, der einfachste und schnellste Weg dazu sollte über git laufen.  

Okay, ich hole mir also via  

$ git Clone ...  

die letzte Entwickler-Version.


Jetzt hab ich allerdings 'ne ganze Reihe von Fragen:  

1. Die Install-Doku sagt, man solle nach dem klonen als nächstes  

git checkout `git tag -l | egrep -ve "(beta|rc)" | tail -1`  

eingeben.  

Was um Himmelswillen tut der Befehl?


1. ich denke, im Büro, wäre die letzte Stable-Version sinniger, als die aktuelle Entwickler-Version. Krieg ich die mit git auch irgendwo her - vielleicht hat sich das aber schon aus Frage 1. beantwortet. ;-)
2. Wenn ich alles richtig gelesen habe, liegt Kivitendo-erp anschließend unter  

/usr/local/src  

Kann ich die da lassen, oder sollte man das dort dann hoffentlich liegende kivitendo-erp-Verzeichnis in den Webserver, also zu Deutsch nach  

/var/www  

kopieren?


und 4. und letztens: wenn ein Update vorliegt, wie installiere ich das dann?


Ich weiß, viele Fragen, aber wenn ich den Kram jetzt schon aufsätze, will ich's auch verstehen und richtig machen.


Herzlichen Dank schonmal und viele Grüße  

Marco
Hallo Marco,


zu 1.) Der Befehl wechselt zur letzten Stable-Version (git tag -l listet alle Tags auf, das egrep schmeisst alle Einträge mit beta oder rc raus und das tail gibt davon den obersten Treffer zurück).


zu 1.1) Genau - das ist damit schon beantwortet.


zu 1.2) Du kannst es da lassen. Oder Du kannst auch das git clone unter /var/www ausführen. Wenn Du die Dateien unter /usr/local/src lässt, musst Du das aber beim Einrichten des apache berücksichtigen, sprich dort wo /var/www steht muss dann natürlich /usr/local/src hin.


zu 4.) Hierzu sollte man sich schon ein bisschen mit git auseinander setzen. Eigentlich wollte ich das im Forum erst nicht beantworten, da doch einiges schief gehen kann, wenn man git nicht kennt, vor Allem, wenn man eigene Änderungen gemacht hat.  

Aber eigentlich geht das dank git recht einfach und ich beschreibe das mal kurz - ohne Garantie:


Wenn Du das nach der Anleitung gemacht hast, dann hast Du lokal zwei Branches, einmal "master" und einmal "meine\_eigenen\_änderungen". Du solltest Dich eigentlich immer im Branch "meine\_eigenen\_änderungen" befinden. Deine eigenen Anpassungen (z.B. Druckvorlagen) solltest Du mit "git commit" einchecken.  

Zwischendurch kannst Du immer mal in den Master-Branch wechseln (aber dann nicht auf kivitendo via Webbrowser zugreifen), und zwar mit "git checkout master". Dann kannst Du mit "git pull" alle Änderungen aus dem Projekt-Repo holen. Master ist dann auf dem aktuellen Stand.  

Mit "git checkout meine\_eigenen\_änderungen" wechselst Du wieder zurück in Deinen Branch, der noch auf dem "alten" Stand ist. Das musst Du tun, wenn Du wieder auf kivitendo zugreifen willst.


Falls es eine neue Version gibt, und Du darauf umsteigen willst, oder Du auf eine neue Beta oder RC-Version (oder auch auf unstable) umsteigen willst, dann kannst Du mit "git rebase master" Deinen Branch auf den Stand des Masters heben.  

Wenn Du nur Änderungen an den Druckvorlagen gemacht hast, ist das in der Regel unproblematisch. Wenn Du Quelltexte angepasst hast, kannst Du Probleme bekommen. Das hier zu erläutern, sprengt den Rahmen.  

Vergiss auch nicht, auch immer die doc/UPGRADE-Datei und doc/changelog zu lesen.


Viele Grüße  

 Bernd
<p><strong> gnu/linux-systeme </strong> verwenden normalerweise entweder glibc (fedora/redhat-familie, arch) oder seinen engen cousin eglibc (debian/ubuntu-familie); da eglibc nun wieder in glibc zusammengeführt wird ( <a href="http://www.eglibc.org/home">siehe <em> eglibc 2.19 branch created</em> unter "news"</a> ), werden sie in naher zukunft alle wieder glibc sein.</p><p>der einfachste weg, die genaue version zu überprüfen, besteht darin, <code>ldd</code> zu fragen, das mit der c-bibliothek geliefert wird.</p><p>auf fedora 20:</p><pre><code>&gt; ldd --version ldd (gnu libc) 2.18 </code></pre><p>das ist glibc 2.18.</p><p>auf raspbian (debian 7-port für armv6 broadcom soc):</p><pre><code>&gt; ldd --version ldd (debian eglibc 2.13-38+rpi2) 2.13 </code></pre><p>das ist eglibc 2.13.</p><p>wenn sie aus irgendeinem grund einige teile gemischt und abgeglichen haben oder sich bei <code>ldd</code> nicht sicher sind, können sie die c-bibliothek direkt abfragen.</p><pre><code>&gt; whereis libc.so libc: /usr/lib64/libc.a /usr/lib64/libc.so /usr/share/man/man7/libc.7.gz </code></pre><p>keines davon ist ausführbar, aber sie geben einen hinweis darauf, wo man eines findet.</p><pre><code>&gt; $(find /usr/lib64/ -executable -name "*libc.so*") --version gnu c library (gnu libc) stable release version 2.18, by roland mcgrath et al. </code></pre><p>es ist jedoch nicht unbedingt so einfach, da sich die c-bibliothek nicht irgendwo befinden muss, wo <code>whereis</code> sie finden kann.</p><pre><code>&gt; whereis libc.so libc: /usr/share/man/man7/libc.7.gz </code></pre><p>leider enthält die manpage keine versionsnummer. <code>ldd</code> ist immer noch nützlich, da jede funktionierende, dynamisch verknüpfte ausführbare datei auf dem system (z. b. fast alles in <code>/usr/bin</code>) mit der c-bibliothek verknüpft wird.</p><pre><code>&gt; ldd /usr/bin/touch /usr/lib/arm-linux-gnueabihf/libcofi\_rpi.so (0xb6eed000) librt.so.1 =&gt; /lib/arm-linux-gnueabihf/librt.so.1 (0xb6ed0000) libc.so.6 =&gt; /lib/arm-linux-gnueabihf/libc.so.6 (0xb6da1000) /lib/ld-linux-armhf.so.3 (0xb6efb000) libpthread.so.0 =&gt; /lib/arm-linux-gnueabihf/libpthread.so.0 (0xb6d82000) </code></pre><p><code>libc.so.6</code> steht in der dritten zeile.</p><pre><code>&gt; /lib/arm-linux-gnueabihf/libc.so.6 --version gnu c library (debian eglibc 2.13-38+rpi2) stable release version 2.13, by roland mcgrath et al. </code></pre> <p>die version von xorgxrdp, die derzeit in epel enthalten ist, wurde gegen rhel 7.7 erstellt, insbesondere gegen (unter anderem) die in rhel 7.7 gelieferte xorg-x11-server-xorg-paketversion, aber sie verwenden centos 7.6.</p><p>es ist derzeit nicht möglich, dieses paket zu installieren, bis centos 7.7 veröffentlicht wird. epel behält im allgemeinen keine älteren versionen von paketen bei, daher gibt es keine ältere version von xorgxrdp, auf die zurückgegriffen werden kann.</p><p>das letzte wort, das ich gesehen habe (von <a href="https://lists.centos.org/pipermail/centos-devel/2019-august/017635.html">gestern</a> ), ist, dass centos 7.7 "wahrscheinlich irgendwann zwischen dem 29. august und dem 6. september 2019" erwartet wird. wenn sie frühzeitig darauf zugreifen möchten, können sie das centos cr-repo aktivieren, bei dem die pakete vor der veröffentlichung etwa eine woche lang bereitgestellt werden. sie sollten "anfang nächster woche" in cr landen. siehe die kommentare in <code>/etc/yum.repos.d/centos-cr.repo</code> für eine erklärung dieses repos.</p><hr><p>wie habe ich herausgefunden, dass das paket auf rhel 7.7 basiert? ich habe gesehen, dass die erforderliche abhängigkeit eine höhere version hatte als jede andere, die sie zur verfügung hatten. aufgrund dessen vermutete ich, dass das paket eine spätere rhel-version benötigt, da ich so etwas schon in den wochen zwischen einer rhel-version und der entsprechenden centos-version gesehen habe.</p><p>um dies zu bestätigen, habe ich auf meinem nächstgelegenen centos 7.6-system nachgesehen und festgestellt, dass die versionsnummer von xorg-x11-server-xorg dieselbe ist, die sie installiert haben. als ich auf einem rhel 7.7-system nachgesehen habe, habe ich dort die versionsnummer gesehen war das gleiche wie das, was es als abhängigkeit wollte.</p> Naja, der Quelltext von frei lizenzierter Software wird üblicherweise in einem Online-Quellcodeverwaltungssystem organisiert. Diese Verwaltungssysteme müssen von irgendjemandem gehostet werden, es gibt aber auch kostenlose Angebote wie SourceForge (Subversion) oder GitHub (git). Und von der dort eingesetzten Software hängt es dann auch mehr oder weniger ab, wie man idealerweise zwecks Beteiligung vorgeht. Bei SourceForge muss der Projekt-Administrator dem SourceForge-Account des Entwicklers Schreibberechtigung einrichten, damit letzterer, nachdem er mittels Subversion die aktuelle Fassung des Codes heruntergeladen und seine Änderungen vorgenommen hat, diese auch wieder ins Online-Repository hochladen kann. Bei GitHub klont man sich gleich den ganzen Code auf den eigenen GitHub-Account ("Fork" genannt), lädt sich mittels git die eigene Online-Kopie lokal herunter, ändert diese, lädt in den eigenen Fork hoch und hinterlegt dem Projekt-Administrator des Originals eine Benachrichtigung, dass dieser doch die Änderungen des Forks in die offizielle Version übernehmen soll. Es empfiehlt sich generell, über die Ticket-Systeme der Projekte die Arbeit an offenen Aufgaben abzusprechen oder für das eigene Anliegen ein neues Ticket zu öffnen, was vor allem bei SourceForge auch darum wichtig ist, um konfligierende Änderungen und das dadurch notwendige Merging möglichst zu vermeiden, sodass die "Bewerbung" bei GitHub-Projekten allgemein einfacher ist, weil man da erstmal unabhängig arbeiten kann.


Bei mir sieht das dann so aus:


<https://github.com/skreutzer>


ist aber nicht gerade als repräsentativ zu betrachten. <p>starten sie von <a href="http://www.ubuntu.com/server">buntu server</a> und bauen sie auf. es verwendet die gleichen repos wie die desktop-distribution und sie können verschiedene desktop-konfigurationen installieren.</p><p>ich schlage nur vor, dass sie sich von den großen metapaketen wie ubuntu-desktop fernhalten, oder sie werden am ende die vollständige distribution sehen.</p><p>wenn sie nur den ubuntu-desktop reduzieren (anstatt ihn aufzubauen) möchten, müssen sie ihn entfernen (was von vielen dingen abhängt) und alle automatisch erfüllten abhängigkeiten in manuell installierte konvertieren. wenn sie nicht dazu in der lage sind, bereinigen sie sie automatisch, da sie (neben anderen tools) "veraltete" pakete bereinigen. dies sind pakete, die keine abhängigkeit oder benutzerauswahl erfüllen.</p> <p>einfach. hier ist das beispiel aus meinem kopf:</p><h1>die oberste ebene <code>cmakelists.txt</code>:</h1><pre><code>cmake\_minimum\_required(version 2.8.10) # you can tweak some common (for all subprojects) stuff here. for example: set(cmake\_disable\_in\_source\_build on) set(cmake\_disable\_source\_changes on) if ("${cmake\_source\_dir}" strequal "${cmake\_binary\_dir}") message(send\_error "in-source builds are not allowed.") endif () set(cmake\_verbose\_makefile on) set(cmake\_color\_makefile on) # remove 'lib' prefix for shared libraries on windows if (win32) set(cmake\_shared\_library\_prefix "") endif () # when done tweaking common stuff, configure the components (subprojects). # note: the order matters! the most independent ones should go first. add\_subdirectory(components/b) # b is a static library (depends on boost) add\_subdirectory(components/c) # c is a shared library (depends on b and external xxx) add\_subdirectory(components/a) # a is a shared library (depends on c and b) add\_subdirectory(components/executable) # executable (depends on a and c) </code></pre><h1><code>cmakelists.txt</code> in <code>components/b</code>:</h1><pre><code>cmake\_minimum\_required(version 2.8.10) project(b c cxx) find\_package(boost 1.50.0 required) file(glob cpp\_files source/*.cpp) include\_directories(${boost\_include\_dirs}) add\_library(${project\_name} static ${cpp\_files}) # required on unix os family to be able to be linked into shared libraries. set\_target\_properties(${project\_name} properties position\_independent\_code on) target\_link\_libraries(${project\_name}) # expose b's public includes (including boost transitively) to other # subprojects through cache variable. set(${project\_name}\_include\_dirs ${project\_source\_dir}/include ${boost\_include\_dirs} cache internal "${project\_name}: include directories" force) </code></pre><h1><code>cmakelists.txt</code> in <code>components/c</code>:</h1><pre><code>cmake\_minimum\_required(version 2.8.10) project(c c cxx) find\_package(xxx required) file(glob cpp\_files source/*.cpp) add\_definitions(${xxx\_definitions}) # note: boost's includes are transitively added through b\_include\_dirs. include\_directories(${b\_include\_dirs} ${xxx\_include\_dirs}) add\_library(${project\_name} shared ${cpp\_files}) target\_link\_libraries(${project\_name} b ${xxx\_libraries}) # expose c's definitions (in this case only the ones of xxx transitively) # to other subprojects through cache variable. set(${project\_name}\_definitions ${xxx\_definitions} cache internal "${project\_name}: definitions" force) # expose c's public includes (including the ones of c's dependencies transitively) # to other subprojects through cache variable. set(${project\_name}\_include\_dirs ${project\_source\_dir}/include ${b\_include\_dirs} ${xxx\_include\_dirs} cache internal "${project\_name}: include directories" force) </code></pre><h1><code>cmakelists.txt</code> in <code>components/a</code>:</h1><pre><code>cmake\_minimum\_required(version 2.8.10) project(a c cxx) file(glob cpp\_files source/*.cpp) # xxx's definitions are transitively added through c\_definitions. add\_definitions(${c\_definitions}) # note: b's and boost's includes are transitively added through c\_include\_dirs. include\_directories(${c\_include\_dirs}) add\_library(${project\_name} shared ${cpp\_files}) # you could need `${xxx\_libraries}` here too, in case if the dependency # of a on c is not purely transitive in terms of xxx, but a explicitly requires # some additional symbols from xxx. however, in this example, i assumed that # this is not the case, therefore a is only linked against b and c. target\_link\_libraries(${project\_name} b c) # expose a's definitions (in this case only the ones of c transitively) # to other subprojects through cache variable. set(${project\_name}\_definitions ${c\_definitions} cache internal "${project\_name}: definitions" force) # expose a's public includes (including the ones of a's dependencies # transitively) to other subprojects through cache variable. set(${project\_name}\_include\_dirs ${project\_source\_dir}/include ${c\_include\_dirs} cache internal "${project\_name}: include directories" force) </code></pre><h1><code>cmakelists.txt</code> in <code>components/executable</code>:</h1><pre><code>cmake\_minimum\_required(version 2.8.10) project(executable c cxx) file(glob cpp\_files source/*.cpp) add\_definitions(${a\_definitions}) include\_directories(${a\_include\_dirs}) add\_executable(${project\_name} ${cpp\_files}) target\_link\_libraries(${project\_name} a c) </code></pre><hr><p>um es klar zu machen, hier ist die entsprechende quellbaumstruktur:</p><pre><code>root of the project ├───components │ ├───executable │ │ ├───resource │ │ │ └───icons │ │ ├───source | | └───cmakelists.txt │ ├───a │ │ ├───include │ │ │ └───a │ │ ├───source | | └───cmakelists.txt │ ├───b │ │ ├───include │ │ │ └───b │ │ ├───source | | └───cmakelists.txt │ └───c │ ├───include │ │ └───c │ ├───source | └───cmakelists.txt └───cmakelists.txt </code></pre><p>es gibt viele punkte, an denen dies angepasst/angepasst oder geändert werden kann, um bestimmte anforderungen zu erfüllen. dies sollte jedoch zumindest den einstieg erleichtern.</p><p><strong> hinweis: </strong>ich habe diese struktur in mehreren mittelgroßen und großen projekten erfolgreich eingesetzt.</p> wenn du die "ultimate edition" nutzt, kannst du per update dir aus den "ultimate extras" das tool "bitlocker" herunterladen.

ansonsten wäre "truecrypt" zu empfehlen (opensource), dort die version 4.3a: http://www.truecrypt.org/downloads.php <p>in ihrer paste sehen wir einen microcode (firmware) fehler. wir fragen uns, ob ihre firmware-datei beschädigt ist. laden sie eine neue kopie herunter und installieren sie sie. vom terminal mit einer funktionierenden internetverbindung:</p><pre><code>wget http://mirrors.kernel.org/ubuntu/pool/main/l/linux-firmware/linux-firmware\_1.162\_all.deb sudo dpkg -i linux*.deb </code></pre><p>starten sie neu und lassen sie uns eine neue paste sehen:</p><pre><code>dmesg | grep iwl </code></pre><p>diese seite schlägt vor, dass die firmware für kernel-versionen 4.3 und neuer die -16-version ist. ihr fahrer lädt -22. lassen sie uns experimentieren, indem wir -21 und -22 umbenennen, um zu versuchen, -16 zu laden und zu sehen, ob es hilft.</p><pre><code>cd /lib/firmware sudo mv iwlwifi-8000c-21.ucode iwlwifi-8000c-21.bak sudo mv iwlwifi-8000c-22.ucode iwlwifi-8000c-21.bak </code></pre><p>starten sie neu und lassen sie uns eine paste haben.</p><pre><code>dmesg | grep iwl </code></pre> <p>nachdem ich wochenlang damit rumgespielt hatte, konnte ich es endlich zum laufen bringen. da ich viele offene fragen gefunden habe, werde ich meine eigenen beantworten, um anderen zu helfen.</p><p><strong> wann funktioniert es? </strong></p><p>zuerst war ich mir nicht sicher, wie dieser voreinstellungsprozess aussehen würde. wann wurde die datei abgeholt und was ist zu erwarten, wenn meine vordefinierte datei nicht vollständig oder falsch war? also habe ich zuerst eine manuelle installation durchgeführt und alle gestellten fragen aufgeschrieben. nach der voreinstellung stellte ich fest, dass einige fragen nicht mehr gestellt werden, die fehlgeschlagenen fragen jedoch weiterhin gestellt wurden. also habe ich danach alles versucht, um sie alle vorzuspielen</p><p><strong> server edition </strong></p><p>ich habe im internet gelesen, dass sie die server-edition von ubuntu benötigen, da sie mit der desktop-edition nicht funktioniert. ich bin mir nicht sicher, ob das zutrifft, aber ich habe gerade die serverversion installiert und die desktop-pakete (in meinem fall gnome) in den voreinstellungsdateien installiert.</p><p><strong> bootoptionen </strong></p><p>manchmal wird über die übergabe von parametern durch die startoptionen gesprochen. ich hatte keine ahnung, wie das geht, aber am ende ist es ganz einfach. booten sie einfach vom installationsmedium und wählen sie ihre installationssprache. drücken sie dann f6, um andere optionen zu öffnen, und die startparameter werden angezeigt. drücken sie einfach die esc-taste, um den anderen optionsdialog zu schließen. <a href="https://i.stack.imgur.com/ztu2n.png"><img src="https://i.stack.imgur.com/ztu2n.png" alt="boot options in ubuntu"></a> </p><p>ich wollte nicht jedes mal alle diese optionen in die boot-optionen eingeben, also habe ich die datei\isolinux\isolinux.cfg (von meinem usb-stick) geändert und in diese geändert:</p><pre><code># d-i config version 2.0 # search path for the c32 support libraries (libcom32, libutil etc.) path include menu.cfg default vesamenu.c32 prompt 0 timeout 0 ui gfxboot bootlogo label custom menu label ^belle custom installation kernel /install/vmlinuz append file=/cdrom/preseed/my.seed debian-installer/language=en debian-installer/country=nl console-setup/ask\_detect=false keyboard-configuration/layoutcode=us debian-installer/locale=en\_us.utf-8 localechooser/preferred-locale=en\_us.utf8 initrd=/install/initrd.gz quiet -- </code></pre><p><strong> wann wird die voreinstellungsdatei geladen? </strong></p><p>ich habe gerade meine voreinstellungsdatei auf den usb-stick gelegt. die offizielle dokumentation von ubuntu beschreibt, dass die verschiedenen voreinstellungsmethoden (datei, netzwerk usw.) während der verschiedenen phasen der installation geladen werden. sie beschreiben jedoch nicht, wann die datei vom usb-stick geladen wird. dies geschieht direkt nach all den fragen zu tastatur, sprache usw. sie müssen diese also durch die startoptionen voreinstellen.</p><p><strong> verspäteter befehl </strong></p><p>mit einer der vorbereiteten fragen (später befehl) können sie benutzerdefinierte befehle kurz vor abschluss der installation ausführen. wie viele andere hatte ich probleme, das zum laufen zu bringen. am ende habe ich ein skript auf die festplatte kopiert und /etc/rc.local geändert, damit dieses skript beim ersten start ausgeführt wird. ich tat dies, da ich alle befehle zur verfügung hatte, die ich brauchte. in dieser phase der installation sind leider einige befehle verfügbar.</p><p><strong> referenzen </strong></p><p>ich habe diese informationen aus vielen anderen foren und führern entnommen. ich erinnere mich nicht an alle, aber um dich auf den weg zu bringen:</p><ul> <li>offizielle ubuntu-dokumentation (enthält auch eine beispiel-vorabdatei): <a href="https://help.ubuntu.com/lts/installation-guide/armhf/apbs02.html">https://help.ubuntu.com/lts/installation-guide/armhf/apbs02.html</a> </li> <li>das offizielle ubuntu-server-buch (es beschreibt es detaillierter). diese site enthält einen teil des vorbereiteten themas online: <a href="http://searchitchannel.techtarget.com/feature/performing-an-automated-ubuntu-install-using-preseeding">http://searchitchannel.techtarget.com/feature/performing-an-automated-ubuntu-install-using-preseeding</a> </li> </ul> Auf die neuste: 5.1/5.1.1, andere wie z.B. 5.0.1 sind evt. auch möglich, aber darüber sollten genug Links in Google zu finden sein. Ich empfehle die neuste Version 5.1.1.
  

  
Gruss Dederi <p>das problem liegt in ihrer gcc-installation. in den gcc 6+ -versionen ist pie (position independent executables) standardmäßig aktiviert. um es zu kompilieren, müssen sie es deaktivieren. sogar gcc 5 hat das problem. dies ist ein bekannter fehler für gcc. <a href="http://bugs.launchpad.net/bugs/1574982">bug link</a> .</p><p>bisher gibt es keinen offiziellen patch von gcc-seite, daher besteht die problemumgehung darin, das makefile der kernelquelle zu patchen.</p><p>wenn sie mit dem patchen der quelldatei vertraut sind, verwenden sie die codes aus diesem link, um die patchdatei zu erstellen, und versuchen sie dann zu kompilieren. <a href="https://lists.ubuntu.com/archives/kernel-team/2016-may/077178.html">patchdatei</a> </p><p>lassen sie mich wissen, wenn sie probleme bei der installation des patches haben.</p>