Linux gdrive: Upload zu Google Drive über Command Line

Ich habe nach einer einfachen Möglichkeit gesucht, meine Dateien (in diesem Fall die Datenbank Backups) in meinem Google Drive zu sichern. Dazu müssen die Dateien aber von meinem Ubuntu Server via CLI in mein Drive geladen werden. Gdrive – kein offizielles Tool von Google – macht genau das.

Installation

Download der Linux Version von gdrive von GitHub.

wget https://docs.google.com/uc?id=0B3X9GlR6EmbnWksyTEtCM0VfaFE&export=download

Umbenennen der Datei.

mv uc?id=0B3X9GlR6EmbnWksyTEtCM0VfaFE gdrive

Ausführbar machen.

chmod +x gdrive

Und abschließend installieren.

install gdrive /usr/local/bin/gdrive

Verification Code hinterlegen

Damit der Google Drive Zugriff funktioniert, muss gdrive dafür berechtigt werden. Bei der ersten Ausführung eines gdrive Befehls wird nach dem Verification Code von Google gefragt.

Also einfach ein Auflisten der Dateien initiieren und den Anweisungen folgen. Der Link muss in den Browser kopiert werden, damit der Code generiert werden kann, welcher anschließend übergeben werden muss.

gdrive list

gdrive verification code

Die vollständige Befehlsübersicht gibt es hier.

Upload Ordner erstellen und ID bestimmen

Die hochgeladenen Dateien sollen in einen bestimmten Ordner hochgeladen werden. Gdrive benötigt dazu die ID dieses Ordners. Also wird in Google Drive händisch ein Ordner angelegt namens “DB Backups”. Um die ID dieses Ordners herauszufinden, kann danach gesucht werden.

gdrive list -q "name='DB Backups'"

gdrive search

Upload der Dateien mit gdrive

Dann kann initial die Datei hochgeladen werden.

gdrive upload backup.sql -p 0B8BrwyjZT63ISDdkOU4wNV85Vzg
Uploading backup.sql
Uploaded 0B8BrwyjZT63IcEJCc21jN3FfeGc at 27.5 KB/s, total 35.4 KB

Dabei definiert “-p” den Überordner des Dateiuploads. In dieses Verzeichnis wird die Datei hochgeladen.

Update von Dateien mit gdrive

Da Google Drive mit den IDs arbeitet und nicht mit Dateinamen, werden neu hochgeladene Dateien, die den gleichen Namen haben nicht überschrieben, sondern neu angelegt. Die Datei würde also mehrfach vorhanden sein. Dafür gibt es den “update” Befehl.

Nach dem initialen Upload hat man die IDs der jeweiligen Dateien und kann so das Update der Datei durchführen.

gdrive update 0B8BrwyjZT63INEZxT3RLMHgtcGc backup.sql
Uploading backup.sql
Updated 0B8BrwyjZT63INEZxT3RLMHgtcGc at 25.8 KB/s, total 35.4 KB

Dadurch wird eine neue Revision der Datei angelegt, die von Google 30 Tage lang vorgehalten wird.

Skript für das automatische Backup & den Upload mit gdrive

Mit folgendem Bash Skript werden die Datenbanken gesichert, hochgeladen und anschließend mit dem aktuellen Datum im Namen versehen. Dumps, die älter als 10 Tage sind, werden gelöscht.


#!/bin/bash
now=$(date +"%Y_%m_%d")
echo "Doing database backup with" $now "as date reference"
echo "Saving WordPress"
mysqldump wp -u root -p > /var/backups/wp.sql
echo "Saving Nextcloud"
mysqldump nc -u root -p > /var/backups/nc.sql
echo "Saving Piwik"
mysqldump piwik -u root -p > /var/backups/piwik.sql
echo "Saving Rainloop"
mysqldump rainloop -u root -p > /var/backups/rainloop.sql
echo "Saving Vmail"
mysqldump vmail -u root -p > /var/backups/vmail.sql
echo "Saving done"

echo "Upload to Drive"
gdrive update 0B8BrwyjZT63IT2V0Ymp2NEpCV28 /var/backups/wp.sql
gdrive update 0B8BrwyjZT63IaTRxemx6TTM0akk /var/backups/nc.sql
gdrive update 0B8BrwyjZT63ISUVhMFF1Nzk5R2M /var/backups/piwik.sql
gdrive update 0B8BrwyjZT63IMk5SWXpKclFZekk /var/backups/vmail.sql
gdrive update 0B8BrwyjZT63INGh3YUxYQ2Rkcmc /var/backups/rainloop.sql

echo "Moving dumps to name with timestamp"
mv /var/backups/wp.sql /var/backups/wp-$now.sql
mv /var/backups/nc.sql /var/backups/nc-$now.sql
mv /var/backups/piwik.sql /var/backups/piwik-$now.sql
mv /var/backups/rainloop.sql /var/backups/rainloop-$now.sql
mv /var/backups/vmail.sql /var/backups/vmail-$now.sql

echo "Deleting dumps older than 10 days"
find /var/backups/*.sql -mtime +10 -type f -delete -print
echo "done."

Advertisements

OpenVPN Server unter Ubuntu aufsetzen

Wie setzt man einen OpenVPN Server auf, um sich z.B. im öffentlichen WLAN abzusichern?

OpenVPN ist ein Programm zOpenVPN Logoum Aufbau eines Virtuellen Privaten Netzwerkes (VPN) über eine verschlüsselte TLS-Verbindung. Zur Verschlüsselung werden die Bibliotheken des Programmes OpenSSL benutzt. Es verwendet wahlweise UDP oder TCP zum Transport.

OpenVPN ist freie Software unter der GNU GPL und unterstützt die Betriebssysteme Linux, Solaris, OpenBSD, FreeBSD, NetBSD, Mac OS X, QNX, Windows 2000/XP/Vista/7/8, Android, iOS, Maemo und MeeGo sowie das Router-Linux OpenWRT, weiterhin stehen angepasste Implementierungen für eine Vielzahl von Linux-basierten Endgeräten, wie z. B. Settop-Boxen der Firma Dream Multimedia oder für Router der FRITZ!Box-Linie der Firma AVM zur Verfügung.

— Artikel in Wikipedia

Download des openvpn-install.sh Skripts

wget https://git.io/vpn -O openvpn-install.sh
--2016-12-21 10:24:08-- https://git.io/vpn
Resolving git.io (git.io)... 23.23.117.228, 107.21.206.81, 107.21.249.214, ...
Connecting to git.io (git.io)|23.23.117.228|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://raw.github.com/Nyr/openvpn-install/master/openvpn-install.sh [following]
--2016-12-21 10:24:10-- https://raw.github.com/Nyr/openvpn-install/master/openvpn-install.sh
Resolving raw.github.com (raw.github.com)... 151.101.12.133
Connecting to raw.github.com (raw.github.com)|151.101.12.133|:443... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://raw.githubusercontent.com/Nyr/openvpn-install/master/openvpn-install.sh [following]
--2016-12-21 10:24:11-- https://raw.githubusercontent.com/Nyr/openvpn-install/master/openvpn-install.sh
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.12.133
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.12.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 13211 (13K) [text/plain]
Saving to: ‘openvpn-install.sh’
100%[======>] 13.211 --.-K/s in 0,01s
2016-12-21 10:24:11 (960 KB/s) - ‘openvpn-install.sh’ saved [13211/13211]

Nun wird das Skript ausführbar gemacht und ausgeführt.

chmod +x openvpn-install.sh
./openvpn-install.sh
Welcome to this quick OpenVPN "road warrior" installer
I need to ask you a few questions before starting the setup
You can leave the default options and just press enter if you are ok with them
First I need to know the IPv4 address of the network interface you want OpenVPN
listening to.
IP address: 1.2.3.4
What port do you want for OpenVPN?
Port: 1337
What DNS do you want to use with the VPN?
1) Current system resolvers
2) Google
3) OpenDNS
4) NTT
5) Hurricane Electric
6) Verisign
DNS [1-6]: 2
Finally, tell me your name for the client cert
Please, use one word only, no special characters
Client name: pixel
Okay, that was all I needed. We are ready to setup your OpenVPN server now
Press any key to continue...

Anschließend werden die Schlüssel generiert und der Serverdienst eingerichtet.

Um die VPN Verbindung bspw. über Android aufzubauen, können die kostenlosen Apps benutzt werden. Bspw. OpenVPN for Android

Zum Einrichten wird nur die Konfigurationsdatei (.ovpn) aus dem Userverzeichnis benötigt, die durch das Skript angelegt wurde.

OpenVPN unter Android
OpenVPN unter Android

Die aktuellen Verbindungen lassen sich der Status Logdatei unter /etc/openvpn/openvpn-status.log entnehmen:

OpenVPN CLIENT LIST
Updated,Wed Dec 21 10:32:24 2016
Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
pixel,1.2.3.4:25655,774387,2387112,Wed Dec 21 10:30:23 2016
ROUTING TABLE
Virtual Address,Common Name,Real Address,Last Ref
10.8.0.2,pixel,1.2.3.4:25655,Wed Dec 21 10:32:22 2016
GLOBAL STATS
Max bcast/mcast queue length,0

Nextcloud Undefined Function simplexml_load_file()

Um die neuste NC Version 11 nutzen zu können, muss mindestens PHP 5.6 installiert sein. Nach einem Upgrade der PHP Version von PHP 5.5 auf PHP 7.0 und dem teilweisen Upgrade auf Nextcloud 11 tritt folgender Fehler auf:

{"reqId":"0XX1AddR7FoxNPEzqO0d","remoteAddr":"","app":"PHP","message":"Error: Call to undefined function OC\App\simplexml_load_file() at /var/www/nextcloud/lib/private/App/InfoParser.php#61","level":3,"time":"2016-12-14T08:50:08+01:00","method":"GET","url":"/status.php","user":"--","version":"11.0.0.10"}
{"reqId":"6XpZ9rkTys2hBE9ffhYx","remoteAddr":"","app":"PHP","message":"Error: Call to undefined function OC\App\simplexml_load_file() at /var/www/nextcloud/lib/private/App/InfoParser.php#61","level":3,"time":"2016-12-14T08:50:40+01:00","method":"GET","url":"/status.php","user":"--","version":"11.0.0.10"}

Es fehlen nach dem PHP Upgrade noch weitere Module:
apt-get install php7.0-xml
apt-get install php7.0-zip
apt-get install php7.0-cURL
apt-get install php7.0-gd
service apache2 restart

Anschließend kann auch das Upgrade von Nextcloud durchlaufen:
su - www-data -s /bin/bash -c 'php /var/www/nextcloud/occ upgrade'

Upgrade php5.5 auf 7.0 unter Ubuntu

PHP in der aktuell installierten Version kann man sich via php -v anzeigen lassen.

Um ein Upgrade auf eine neue Version von PHP durchzuführen, kann man Ondřej Surý’s PPA nutzen. Er pflegt die PHP Pakete unter Debian. Die PPA installiert man wie folgt:

apt-get install software-properties-common
add-apt-repository ppa:ondrej/php
apt-get update
apt-get install php7.0

Nutzt man MySQL, muss dieses Paket ebenfalls auf die neue Version gebracht werden:

apt-get install php7.0-mysql

Webserver anpassen

Die alte PHP Version ist immer noch installiert. Um dem Apache mitzuteilen, dass er die neue Version nutzen soll, muss das alte PHP-Modul deaktiviert und das neue aktiviert werden:

a2dismod php5
a2enmod php7.0

Webserver neu starten und fertig.

service apache2 restart

Zum Testen kann man wieder php -v eingeben oder aber die info.php anlegen und sich die aktuellen Einstellungen anzeigen lassen:

<?php
phpinfo();
?>

Subversion SVN Suche in allen Repositories

Hat man bei der Menge an Repositories in Subversion den Überblick verloren und sucht nach einer Datei oder einem Verzeichnis in allen Repositories, kann man es durch ein Bash Skript abwickeln:


#!/bin/bash
IFS=$'n'
cd /srv/svn-parent/
pwd
#Verzeichnis auflisten
array=(*/)
#Repos durchgehen
for dir in "${array[@]%/*}";
do echo "$dir";
files=`svn list --depth infinity -R http://subversion-server/svn/$dir | grep IrgendeinStringNachdemManSuchenWill`
for fn in $files;
do
echo http://subversion-server/svn/$dir/$fn
done
done

Der eigentliche Suchbefehl lautet:

svn list --depth infinity -R http://subversion-server/svn/repository | grep xyz