\documentclass[a4paper, 11pt]{article}
\renewcommand{\familydefault}{\sfdefault}
\usepackage{a4wide}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{color}
\usepackage{graphicx}
\usepackage{setspace}
\usepackage{ulem}
\usepackage{listings}
\usepackage{float}
\usepackage[rflt]{floatflt}
\usepackage{tabularx}
\setlength{\parindent}{0pt}
\title{Ubuntu}
\usepackage[
pdftitle={Ubuntu}
pdfsubject={Ubuntu installation infos for developer}
pdfauthor={udo}
pdfkeywords={Administration, Ubuntu}
]{hyperref}
\definecolor{darkblue}{rgb}{0,0,.5}
\hypersetup{pdftex=true, colorlinks=true, breaklinks=true, linkcolor=darkblue, menucolor=darkblue, pagecolor=darkblue, urlcolor=darkblue}
\begin{document}Ubuntu
\singlespacing
{\Large \textbf{\label{sec:headline}Administration unter Ubuntu}}

\singlespacing
{\LARGE \textbf{\label{sec:title}Wechsel zu Ubuntu 18.04 - Eine Einrichtung für Free Pascal Entwickler}}

\label{sec:description}Von Anfang an stand bei mir fest das ich umsteigen wollte, alleine schon wegen der Sytemupdates unter Windows 10 die mir immer wieder Probleme bereiteten. Immer wieder hatte ich einen Umstieg auf Linux angegangen und immer wieder bin ich in letzter Konsequenz daran gescheitert für alle meinerseits benötigten Einsatzgebiete passende alternativen zu finden, doch diese Mal kam es anders.\newline


\singlespacing
{\Large \textbf{Client Installation }}

Zuerst hatte ich mir eine Liste zusammen gestellt was meine Mindestanforderungen an meinen Entwicklungsrechner mit seinem System und der Entwicklungsumgebung sind.

\begin{itemize}
\item ein System das ein besseres Rechtesystem hat, aber nicht für den Nutzer zu kompliziert wird
\item Firefox als Browser, unter Ubuntu Standard, unter Windows immer noch meine erste Wahl als Entwickler
\item Thunderbird als E-Mail-Client, unter Ubuntu Standard, unter Windows mein bisheriger E-Mail-Client
\item Lazarus / Free Pascal (FPCUPdeluxe) läuft unter Ubuntu wie auch unter Windows
\item Remote Desktop Betrieb zum Server (nicht nur Konsole) unter Ubuntu über Remmina
\item Dateifreigabe im Netzwerk, unter Ubuntu in Nautilus über Samba
\item SVN und Git, unter Ubuntu Git Cola/DAG (in Nautilus mit RabbitVCS), als Alternative zu Windows im Explorer mit TortoiseSVN und TortoiseGit
\item ein Ersatz für Notepad++, unter Ubuntu kein equivalentes Gegenstück aber als teilweiser Ersatz SciTE, GEdit, GHex, Meld, ...
\item ein Ersatz für Paint.net, unter Ubuntu Pinta
\item Inkscape läuft unter Ubuntu wie auch unter Windows
\end{itemize}

Sicherlich gibt es einige Wege um ein Entwicklungsrechner aufzusetzen, aber gerade Umsteiger von Windows haben es am Anfang nicht gerade leicht mit Ubuntu.

Gestartet bin ich mit einem USB-Stick mit Ubuntu 18.04 Bionic Beaver und der Standard Installation, dieses Vorgehen möchte ich nicht weiter beschreiben denn hiervon gibt es zahlreiche Beschreibungen im Netz.\newline
 Starten möchte ich den anschließenden Schritten, der Installation und Konfiguration der Komponenten.

Tritt in den folgenden Passagen [user] im Text oder Code auf ist an dieser Stelle der eigene Benutzer gemeint.

\singlespacing
{\large \textbf{Vorbereitungen}}

Nautilus um die Funktion \&quot;Neue Dokument\&quot; anlegen erweitern, im Verzeichnis \&quot;/home/[user]/Vorlagen\&quot; eine Datei leer.txt anlegen
\begin{lstlisting}[breaklines]cd Vorlagen\newline
touch leer.txt\newline
\end{lstlisting}

Unter Ubuntu werden viele Vorgänge im Terminal-Fenster durchgeführt und oft sind es Befehle für die man Administrationsrechte benötigt also \&quot;SUDO\&quot;, was ist da naheliegender als sich ein Terminal-Fenster mit sudo-Rechten zu öffnen damit man nicht vor jeden Befehl sudo tippen muss. \newline


\textbf{Terminal Fenster mit root Rechten (sudo)}
\begin{lstlisting}[breaklines]sudo -i\newline
[sudo] Passwort for root:\end{lstlisting}

\emph{Einmal das Passwort eingeben für alle folgenden Befehle.}

Ein Update der Paketeliste durchführen
\begin{lstlisting}[breaklines]apt-get update\newline
apt-get upgrade\end{lstlisting}

Nautilus um die Dateibehandlung \&quot;Als Administrator bearbeiten\&quot; erweitern, damit das Bearbeiten von geschützten Dateien vereinfacht wird
\begin{lstlisting}[breaklines]apt install nautilus-admin\newline
nautilus -q\end{lstlisting}

\singlespacing
{\large \textbf{Entwicklungsumgebung installieren}}

Die fehlenden Pakete für Free Pascal und Lazarus nachinstallieren
\begin{lstlisting}[breaklines]apt-get install libx11-dev\newline
apt-get install libgdk-pixbuf2.0-dev\newline
apt-get install libpango1.0-dev\newline
apt-get install libgtk2.0-dev\end{lstlisting}

Möchte man mit OpenGL ( TOpenGLControl ) entwickeln ist auch noch das folgende Paket erforderlich
\begin{lstlisting}[breaklines]apt-get install freeglut3-dev\end{lstlisting}

SVN / Git installieren
\begin{lstlisting}[breaklines]apt-get install subversion\newline
apt install git\end{lstlisting}

SVN / Git GUI installieren
\begin{lstlisting}[breaklines]apt-get install rabbitvcs-cli rabbitvcs-core rabbitvcs-gedit rabbitvcs-nautilus\newline
apt install git-cola\end{lstlisting}

\singlespacing
\textbf{Free Pascal und Lazarus installieren}

fpcupdeluxe-x86\_64-linux auf \href{https://github.com/LongDirtyAnimAlf/fpcupdeluxe/releases}{https://github.com/LongDirtyAnimAlf/fpcupdeluxe/releases} herunter laden und im persönlichen Ortner (/home/[user]/) unter fpcupdeluxe ablegen und in Nautilus mit Rechts-Klick auf die Datei, die Eigenschaften bearbeiten, im Reiter Zugriffsrechte Ausführen Haken setzen. (Properties--\&gt;Permissions--\&gt;Allow executing file as program). Nun lässt sich das Programm einfach starten, im folgenden habe ich einfach das Installations-Verzeichnis im Benutzerverzeichnis /home/[user]/fpcupdeluxe angegeben und sowohl Free Pascal als auch Lazarus in der Trunk Version installiert (dieses lief unter Ubuntu wesentlich schneller als unter Windows).

Damit man in Zukunft dieses Programm zum Updaten von Free Pascal als auch Lazarus benutzen kann empflielt es sich eine Verknüpfungsdatei anzulegen (desktop shortcut launcher)\newline
 Eine Datei FPCUPdeluxe.desktop im eigenen persönlichen Ortner (/home/[user]/) unter .local/share/applications anlegen (das Icon habe ich mir aus dem fpcupdelux Projekt besorgt):
\begin{lstlisting}[breaklines][Desktop Entry]\newline
Version=1.0\newline
Encoding=UTF-8\newline
Type=Application\newline
Icon=/home/[user]/fpcupdeluxe/fpcupdeluxe.ico\newline
Exec=/home/[user]/fpcupdeluxe/fpcupdeluxe-x86\_64-linux\newline
Name=FPCUPdeluxe\newline
GenericName=GUI to install an update Lazarus IDE and Free Pascal Compiler\newline
Categories=Application;Development;GUIInstaller;\newline
Keywords=editor;Pascal;IDE;FreePascal;fpc;Design;Designer;\newline
Name[de\_DE]=FPCUPdeluxe\end{lstlisting}

Um diese Datei startbar zu machen auch hier in Nautilus mit Rechts-Klick auf die Datei, die Eigenschaften bearbeiten, im Reiter Zugriffsrechte Ausführen Haken setzen.

Falls fpcdeluxe es immer noch nicht schafft eine funktionierende Verknüfungsdatei anzulegen folgt hier nun noch die passende Datei für Lazarus\newline
 Eine Datei Lazarus.desktop im eigenen persönlichen Ortner (/home/[user]/) unter .local/share/applications anlegen:
\begin{lstlisting}[breaklines][Desktop Entry]\newline
Version=1.0\newline
Encoding=UTF-8\newline
Type=Application\newline
Icon=/home/[user]/fpcupdeluxe/lazarus/images/icons/lazarus.ico\newline
Exec=/home/[user]/fpcupdeluxe/lazarus/lazarus --pcp=\&quot;/home/[user]/fpcupdeluxe/config\_lazarus\&quot; \%f\newline
Name=Lazarus\_fpcupdeluxe\newline
GenericName=Lazarus IDE with Free Pascal Compiler\newline
Categories=Application;IDE;Development;GUIDesigner;\newline
Keywords=editor;Pascal;IDE;FreePascal;fpc;Design;Designer;\newline
Name[de\_DE]=Lazarus\end{lstlisting}

Nun sollten sowohl FPCUPdeluxe als auch Lazarus in der Anwendungsliste (Anwendungen anzeigen) angezeigt werden, dort sind sie auch aufrufbar, ich habe sie mir direkt zu den Favoriten hinzugefügt.

\singlespacing
{\large \textbf{Tools zur Bildbearbeitung/Optimierung installieren}}

libpodofo-utils um uncompress von pdf zu ermöglichen
\begin{lstlisting}[breaklines]apt install libpodofo-utils\end{lstlisting}

jpegoptim und jpegtran zur jpeg Optimierung
\begin{lstlisting}[breaklines]apt install jpegoptim\newline
apt install libjpeg-progs\newline
apt install libjpeg-turbo-progs\end{lstlisting}

optipng zur png Optimierung
\begin{lstlisting}[breaklines]apt install optipng\end{lstlisting}

gifsicle zur gif Optimierung
\begin{lstlisting}[breaklines]apt install gifsicle\end{lstlisting}

Erweiterung für Nautilus zum anzeigen von Video-Thumbnails
\begin{lstlisting}[breaklines]apt install ffmpegthumbnailer\end{lstlisting}

Allgemeiner mp4 support
\begin{lstlisting}[breaklines]apt install libdvdnav4 libdvdread4 gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly libdvd-pkg\newline
apt install ubuntu-restricted-extras\end{lstlisting}

WebP support
\begin{lstlisting}[breaklines]apt install webp\end{lstlisting}

pdftohtml - poppler 0.62.0 braucht nicht installiert werden

Installieren der paint.net alternative pinta und inkscape als Bild/Vektor-Bearbeitungsprogramme
\begin{lstlisting}[breaklines]apt install pinta\newline
apt install inkscape\end{lstlisting}

Erweiterung für Nautilus zum Reduzieren der Größe von JPG/PNG Dateien
\begin{lstlisting}[breaklines]add-apt-repository ppa:atareao/nautilus-extensions\newline
apt update\newline
apt install nautilus-reduceimages\newline
nautilus -q\end{lstlisting}

\singlespacing
{\large \textbf{Komprimierungs-Tools}}

zlib
\begin{lstlisting}[breaklines]apt install build-essential checkinstall zlib1g-dev -y\end{lstlisting}

7zip
\begin{lstlisting}[breaklines]apt install p7zip-full\end{lstlisting}

brotli
\begin{lstlisting}[breaklines]apt install brotli\end{lstlisting}

\singlespacing
{\large \textbf{OpenSSL aus den Sourcen erzeugen}}

OpenSSL download der Sourcen
\begin{lstlisting}[breaklines]cd /usr/local/src/\newline
wget https://www.openssl.org/source/openssl-1.1.1.tar.gz\newline
tar -xf openssl-1.1.1.tar.gz\end{lstlisting}

OpenSSL Installation
\begin{lstlisting}[breaklines]cd openssl-1.1.1\newline
./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib\newline
make\newline
make install\end{lstlisting}

link libraries konfigurieren

Datei anlegen /etc/ld.so.conf.d/openssl-1.1.1.conf (in Nautilus \&quot;Als Administrator öffnen\&quot;, Neues Dokument leer, \&quot;Als Administrator bearbeiten\&quot;, im KEdit speichern unter)
\begin{lstlisting}[breaklines]cd /etc/ld.so.conf.d\newline
touch openssl-1.1.1.conf\end{lstlisting}
\begin{lstlisting}[breaklines]/usr/local/ssl/lib\end{lstlisting}

Datei /etc/manpath.config bearbeiten (in Nautilus \&quot;Als Administrator bearbeiten\&quot;) und die folgende Zeile einfügen
\begin{lstlisting}[breaklines]MANPATH\_MAP /usr/local/ssl/bin /usr/local/ssl/man\end{lstlisting}

manual database Update
\begin{lstlisting}[breaklines]mandb\end{lstlisting}

Datei /etc/environment (in Nautilus \&quot;Als Administrator bearbeiten\&quot;) /usr/local/ssl/bin hinzufügen
\begin{lstlisting}[breaklines]PATH=\&quot;/usr/local/sbin:/usr/local/bin:\textbf{/usr/local/ssl/bin:}/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games\&quot;\end{lstlisting}

Erfolgreiche Änderung überprüfen
\begin{lstlisting}[breaklines]ldconfig -v\newline
which openssl\newline
openssl version -a\end{lstlisting}

\singlespacing
{\large \textbf{Um etwas mehr an den Desktop Einstellungen verändern zu können oder sogar ein Windows ähnlicheres Aussehen zu erreichen kann man ein paar nützliche Tools installieren}}

dconf installieren
\begin{lstlisting}[breaklines]apt install dconf-tools\end{lstlisting}

Windows look
\begin{lstlisting}[breaklines]apt install gnome-shell-extensions gnome-shell-extension-dash-to-panel gnome-tweaks\end{lstlisting}

\textbf{restart}\newline
 dconf -\&gt; Tweaks: Optimierungen -\&gt; Erweiterungen -\&gt; Dash to Panel

\singlespacing
{\large \textbf{Firefox und Thunderbird}}

Das Firefox Profile welches ich unter Windows gesichert habe wie auch das Thunderbird Profile in den Ordner (/home/[user]/) unter .mozilla/firefox/[profilename] bzw. ,thunderbird/[profilename] ablegen, falls die Ordner noch nicht existieren einfach die Anwendung einmal starten.

Im Termninal lassen sich die beiden Anwendungen mit Übergabeparameter -p aufrufen danach erscheint ein Dialog zur Profile-Auswahl und zur Einstellung des Standard-Profiles.
\begin{lstlisting}[breaklines]firefox -p\newline
thunderbird -p\end{lstlisting}

\singlespacing
{\large \textbf{Dateifreigabe über Samba}}
\begin{lstlisting}[breaklines]apt install system-config-samba\end{lstlisting}

Datei /etc/libuser.conf anlegen (in Nautilus \&quot;Als Administrator öffnen\&quot;, Neues Dokument leer, \&quot;Als Administrator bearbeiten\&quot;, im KEdit speichern unter)
\begin{lstlisting}[breaklines]cd /etc\newline
touch libuser.conf\end{lstlisting}

Grafisches Benutzerinterface für Samba
\begin{lstlisting}[breaklines]system-config-samba\end{lstlisting}

Samba Neustart
\begin{lstlisting}[breaklines]systemctl restart smbd.service\end{lstlisting}

\singlespacing
{\large \textbf{Tools}}

\singlespacing
\textbf{SciTE}
\begin{lstlisting}[breaklines]apt-get install scite\end{lstlisting}

\singlespacing
\textbf{GHex Editor}
\begin{lstlisting}[breaklines]apt-get install ghex\end{lstlisting}

\singlespacing
\textbf{Bei Einrichtung eines Dual-Boot Systems ist eine ntfs Partition zum Datenaustausch zwischen den Systemen sinnvol (ntfs data patition mount)}

Datei /etc/fstab (in Nautilus \&quot;Als Administrator bearbeiten\&quot; im KEdit nach der ntfs Partition suchen und die Zeile bearbeiten)
\begin{lstlisting}[breaklines]UUID=342708ED2C7A02F2 /home/udo/data ntfs defaults,nls=utf8,umask=000,dmask=027,fmask=137,uid=1000,gid=1000,windows\_names 0 0\end{lstlisting}

\singlespacing
\textbf{Fingerprint Scanner unterstützung einrichten}
\begin{lstlisting}[breaklines]apt install -y fprintd libpam-fprintd\end{lstlisting}

Datei /etc/pam.d/common-auth (in Nautilus \&quot;Als Administrator bearbeiten\&quot; im KEdit folgende Zeile einfügen)
\begin{lstlisting}[breaklines]auth [success=2 default=ignore] pam\_fprintd.so max\_tries=1 timeout=10\end{lstlisting}

\singlespacing
\textbf{System aufräumen}

alte Kernel entfernen
\begin{lstlisting}[breaklines]apt autoremove\end{lstlisting}

überflüssige Abhängigkeiten entfernen
\begin{lstlisting}[breaklines]apt-get autoremove\end{lstlisting}

Paket-Cache leeren
\begin{lstlisting}[breaklines]apt-get clean\end{lstlisting}

\singlespacing
{\Large \textbf{Server Installation}}

Für den Server kann man natürlich ein spezielles Ubuntu Server Image herunterladen, da ich aber eine grafische Benutzeroberfläche bevorzuge auf die ich Remote zugreifen kann habe ich das Selbe Image wie zur Client Installation genommen, allerdings nur die minimale Installation durchgeführt.

Nach der Installation habe ich die selben Vorbereitungen wie bei der Client Installation durchgeführt

\singlespacing
{\large \textbf{Installation des Remote Desktop Freigabe}}
\begin{lstlisting}[breaklines]apt update \&amp;\&amp; sudo apt install -y vino\newline
apt -y install xrdp\newline
systemctl enable xrdp\newline
sudo ufw allow 3389/tcp\newline
sudo /etc/init.d/xrdp restart\end{lstlisting}

Unter Einstellungen -\&gt; Freigabe sowohl in der Kopfleiste Einschalten als auch die Bildschirmfreigabe aktivieren, hier das passende Netzwerk auswählen, Verbindungen zur Steuerung des Bildschirms erlauben und ein Passwort vergeben.

\singlespacing
\textbf{Mit Remmina auf die Remote Desktop Freigabe zugreifen}

In Remmina über den Plusbutton ein neues Verbindungsprofil erstellen, Protokoll VNC auswählen, Bezeichnug vergeben, bei Server den Rechnername und bei Benutzerpasswort das Passwort der Freigabe eingeben, anschließend speichern.\newline
 Je nach gewünschter Qualität, Einschränkungen und bezüglich eines SSH-Tunnel können auch noch Einstellungen vorgenommen werden, die sind aber nicht unbedingt erforderlich.

\singlespacing
{\large \textbf{Dateifreigabe über Samba}}

Die Dateifreigabe wie bei der ClientInstallation durchgeführt.

\singlespacing
{\large \textbf{Installation des eigenen Servers oder LAMP (Apache, PHP 7.2 und MySQL) Installation}}
\begin{lstlisting}[breaklines]apt-get install apache2 libapache2-mod-php7.2 php7.2 php7.2-mysql mysql-server\end{lstlisting}

\singlespacing
{\large \textbf{Installation nützlicher Netzwerktools}}
\begin{lstlisting}[breaklines]apt install net-tools\end{lstlisting}

\singlespacing
{\large \textbf{Hosts Entry des Services in /etc/hosts eintragen\newline
}}
\begin{lstlisting}[breaklines]127.0.0.1 www.gocher.me\end{lstlisting}

\singlespacing
{\large \textbf{dhcp freigabe ipv6}}
\begin{lstlisting}[breaklines]apt install dhcpcd5\end{lstlisting}

Datei /etc/dhcpcd.conf bearbeiten (in Nautilus \&quot;Als Administrator bearbeiten\&quot;) und folgende Zeile hinzufügen\newline

\begin{lstlisting}[breaklines]slaac hwaddr\end{lstlisting}

Einstellungen überprüfen\newline

\begin{lstlisting}[breaklines]ifconfig\end{lstlisting}

\singlespacing
{\large \textbf{Eine Service für den eigens geschrieben daemon anlegen, hier am Beispiel meines Webservers  (httpServer.service)}}

Das Verzeichnis /etc/systemd/system (in Nautilus \&quot;Als Administrator bearbeiten\&quot;) /etc/systemd/system/httpServer.service hinzufügen
\begin{lstlisting}[breaklines][Unit]\newline
Description=Udos Webserver\newline
After=network-online.target\newline
[Install]\newline
[Service]\newline
\#User=udo\newline
\# The configuration file application.properties should be here:\newline
Type=simple\newline
\#path of workspace\newline
WorkingDirectory=/home/[user]/webserver\newline
\#path to executable.\newline
ExecStart=/home/[user]/webserver/httpServer -r\newline
\#Restart=on-failure\newline
[Install]\newline
WantedBy=multi-user.target\end{lstlisting}

\singlespacing
\textbf{Zum Ausführen hier noch die passenden Komandos}
\begin{lstlisting}[breaklines]systemctl daemon-reload\newline
systemctl enable httpServer.service\newline
systemctl start httpServer.service\newline
systemctl status httpServer.service\newline
systemctl reload-or-restart httpServer.service\newline
systemctl stop httpServer.service\newline
systemctl list-units\end{lstlisting}

\singlespacing
{\large \textbf{Let's encrypt certbot installieren und einrichten\newline
}}
\begin{lstlisting}[breaklines]add-apt-repository ppa:certbot/certbot\newline
apt update\newline
dpkg --configure -a\newline
apt install certbot\end{lstlisting}

\singlespacing
\textbf{Certificate erzeugen}

Hier wieder am Beispiel von meinem Webauftritt.\newline

\begin{lstlisting}[breaklines]certbot certonly --agree-tos --email udo.schmal@t-online.de --webroot -w /home/udo/webserver/\_\_ssl/ -d gocher.me -d www.gocher.me -d h2.gocher.me -d maps.gocher.me -d test.gocher.me -d app.gocher.me\end{lstlisting}

result is in /etc/letsencrypt
\end{document}