/* */ Blog Gebert iT – Home – iT Themen

AdSense – Error: Invalid site state null

Dieser Fehler kommt wenn man mit dem Plugin “Site Kit von Google”, eine Verbindung mit Adsense herstellen will und auf der Webseite von AdSense eine Subdomain eingestellt hat.

Einfach die Subdomain auf der AdSense Webseite löschen und mit dem Sitekit die Verbindung herstellen.



Amazon Spezialangebote blocken

Um die Amazon Werbung auf den Fire HD zu verhindern, trägt man folgende Domainen in piHole, nextDNS.io ein.

Die Einträge lauten:

*.usas-prod-eu.amazon.com
*.dp-contacts-eu.amazon.com
*.cognito-identity.eu-west-1.amazonaws.com
*.mas-ext-eu.amazon.com
*.dp-gw-na.amazon.com
*.device-metrics-us.amazon.com
*.mads-eu.amazon.com
*.video-ads.a2z.com
*.serving-sys.com
*.sizmek.com
*.rfihub.net
*.rfihub.com
*.amazon.dev
*.assoc-amazon.de
*.assoc-amazon.com
*.assoc-amazon.co.uk
*.assoc-amazon.ca
*.aax-us-iad.amazon.com
*.aax-eu.amazon.de
*.aax-eu.amazon.co.uk
*.aax-eu-dub.amazon.com
*.amazon-adsystem.amazon.com
*.amazon-adsystem.com
*.aiv-cdn.net
*.unagi-na.amazon.com
*.unagi.amazon.de
*.unagi-eu.amazon.com
*.tk-adsystem.a2z.com
*.advertising.a2z.com
*.advertising-api-eu.amazon.com
*.advertising.amazon.de
*.advertising.amazon.com
*.affiliationjs.s3.amazonaws.com
*.analyticsengine.s3.amazonaws.com

Diese Domainen können nicht per hosts Datei geblockt werden.

Ohne ein Werksreset funktioniert es nicht.



Squid Proxy SSL bump

Raspberry Pi 4 – Squid 4.6 mit SSL installieren

Um SSL in Squid 4.x nutzen zu können, müssen wir ein Debian Paket mit dem
Quelltext erstellen. Und das geht so:

Wir logen uns mit sudo -i als root ein und sparen dabei das Wort beim installieren.

Zuerst aktivieren wir die Source Quellen
von Debian 10 und machen ein Update.

sed -i 's/^#deb-src/deb-src/' /etc/apt/sources.list
apt update

Wir installieren die erforderlichen Pakete um ein deb Paket erstellen zu können.

apt install devscripts build-essential fakeroot libssl1.0-dev debhelper
apt install squid-cgi calamaris squid-langpack libdbi-perl ssl-cert \
 libecap3-dev cdbs libcppunit-dev libcap2-dev libdb-dev libkrb5-dev \
 comerr-dev libldap2-dev libnetfilter-conntrack-dev libpam0g-dev libsasl2-dev

Wir laden den Quellcode von squid herunter und erstellen eine deb Datei.

mkdir /tmp/squid
cd /tmp/squid
apt source squid

Die SSL Funktion von Squid schalten wir frei.

vi squid-4.6/debian/rules
nach DEB_CONFIGURE_EXTRA_FLAGS –mandir=/usr/share/man \ suchen und folgendes eintragen:

--mandir=/usr/share/man \
--with-openssl \
--enable-ssl \
--enable-ssl-crtd \

Das Debian Paket wird erstellt mit folgenden Befehl:

cd /tmp/squid/squid-4.6
dpkg-buildpackage -rfakeroot -b -uc -us

Die erstellten Packete installieren wir
und schützen sie vor einem ungewollten
Update mit apt-mark.

dpkg --install squid-common_4.6*.deb
dpkg --install squid_4.6*.deb
dpkg --install squidclient_4.6*.deb
apt-mark hold squid squid-common squidclient

Wir erstellen unser eigenes SSL Certificate.

cd /etc/squid
mkdir ssl_cert
chown proxy:proxy /etc/squid/ssl_cert
chmod 700 /etc/squid/ssl_cert
cd ssl_cert

openssl req -new -newkey rsa:2048 -sha256 -days 365 -nodes -x509 -extensions v3_ca -keyout myCA.pem -out myCA.pem
openssl x509 -in myCA.pem -outform DER -out myCA.der

myCA.pem in das System von Androiden unter
Sicherheit installieren. Unter Windows wird das Zertifikat in dem Browser installiert. Danach googeln wie das geht. ?

Wir editieren die squid.conf mit vi und suchen nach 3128 und ab da wird folgendes ergänzt:

vi /etc/squid/squid.conf

http_port 3128 ssl-bump \
  cert=/etc/squid/ssl_cert/myCA.pem \
  generate-host-certificates=on 

sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/lib/ssl_db -M 4MB

acl step1 at_step SslBump1

ssl_bump peek step1
ssl_bump bump all

Die SSL Datenbank erstellen und Rechte setzen mit start von Squid.

/usr/lib/squid/security_file_certgen -c -s /var/lib/ssl_db -M 4MB
chown proxy:proxy /var/lib/ssl_db
chown proxy:proxy /var/log/squid/
systemctl restart squid

Mögliche Fehler:
dynamic_cert_mem_cache_size=4MB

Trägt man das ein, startet Squid nicht. Es ist sowieso ein default Wert.

Das wars. Viel Spaß mit Squid.

Nextcloud 18 mit Apache2 auf dem Raspberry Pi 4 ohne Fehler installieren.

Nextcloud 18 fehlerlos und automatisch installieren.

# Eure Daten Username,Passwort,Pfad usw eintragen. Wird für
die automatische Installation benötigt. Falls ihr Befehl für Befehl
in die Bash kopiert, müsst ihr die Daten auch Zeile für Zeile in
die bash kopieren und Enter drücken. Ohne dem funktioniert es
nicht, da alles dynamisch zur Selbstanpassung geschrieben wurde.

##############################################################
# MySQL Daten
root_pw=Euer root MySQL Passwort
sql_user=Euer SQL User
sql_user_pw=Euer SQL User Passwort
database=nextcloud # Eure Datenbank Name, die wir erstellen
# Nextcloud Daten
auser=Benutzername
apass=Benutzerpasswort
adir=/var/www/nextcloud # müsste passen 🙂
trust=raspberrypi # müsste passen 🙂
trust1=Euer DynDNS
##############################################################

# mit root anmelden
sudo -i

# PHP Repo hinzufügen
wget -q https://packages.sury.org/php/apt.gpg -O- | apt-key add -

echo "deb https://packages.sury.org/php/ buster main" | tee /etc/apt/sources.list.d/php.list

# Zuerst einmal updaten, da wir das PHP Repo hinzugefügt haben.
apt update -y && apt upgrade -y

# Apache und Mysql installieren

apt install apache2 mariadb-server zip unzip apt-transport-https \
 libmariadb-dev-compat libmariadb-dev libapache2-mod-security2 \
 imagemagick

# PHP 7.3 und benötigte Module installieren

apt install php7.3-fpm php7.3-gd php7.3-mysql php7.3-curl \
  php7.3-zip php7.3-intl libapache2-mod-php7.3 php7.3-mbstring  \
  php7.3-bz2 php7.3-cli php7.3-common php7.3-ssh2 php7.3-sqlite3 \
  php7.3-xml php7.3-json php7.3 php-apcu php-imagick



# Eine Seite für Apache erstellen

cat <<EOF > /etc/apache2/sites-available/nextcloud.conf
<VirtualHost *:443>
  ServerName localhost # Ersetzt localhost mit euren dyndns 
  ServerAdmin webmaster@localhost
   
  DocumentRoot $adir
  ProxyErrorOverride on

<If "-f %{SCRIPT_FILENAME}">
        SetHandler "proxy:unix:/run/php/php7.3-fpm.sock|fcgi://localhost"
</If>  

  LogLevel warn
  ErrorLog \${APACHE_LOG_DIR}/error.log
  CustomLog \${APACHE_LOG_DIR}/access.log combined

<Directory /var/www>
  Options Indexes FollowSymLinks
  AllowOverride All
  Require all granted
</Directory>

Redirect 301 /.well-known/carddav /remote.php/dav
Redirect 301 /.well-known/caldav /remote.php/dav

<IfModule mod_headers.c>
  Header always set Strict-Transport-Security "max-age=15552000; inextcloudludeSubDomains"
  Header always set Referrer-Policy "no-referrer"
</IfModule>

</VirtualHost>
EOF

# Nextcloud Apache Seite aktivieren
a2ensite nextcloud.conf

# Apache module aktivieren
a2enmod headers proxy_fcgi proxy_balancer proxy proxy_http

# Apache neu starten
service apache2 restart

# Wenn ihr dyndns benutzt, letsencrypt SSL installieren
apt install python3-certbot-apache
certbot -d "euer dyndns" --apache

# Apache erneut neu starten
service apache2 restart

# MySQL (MariaDB) vorbereiten
mysql_secure_installation

# MySQL starten
systemctl start mysql

# MySQL Datenbank anlegen
mysql -u root -p$root_pw -e "CREATE DATABASE $database;"

# MySQL User anlegen und die Rechte vergeben

mysql -u root -p$root_pw -e "CREATE USER '$sql_user'@'%' IDENTIFIED BY '$sql_user_pw'; \
	GRANT ALL PRIVILEGES ON $database.* TO '$sql_user'@'localhost';FLUSH PRIVILEGES;"

# Für Nextcloud müssen wir ein paar Einstellungen in der php.ini ändern

sed -i "s/memory_limit = 128M/memory_limit = 512M/" /etc/php/7.3/fpm/php.ini
sed -i "s/;opcache.enable=.*/opcache.enable=1/" /etc/php/7.3/fpm/php.ini
sed -i "s/;opcache.enable_cli=.*/opcache.enable_cli=1/" /etc/php/7.3/fpm/php.ini
sed -i "s/;opcache.interned_strings_buffer=.*/opcache.interned_strings_buffer=8/" /etc/php/7.3/fpm/php.ini
sed -i "s/;opcache.max_accelerated_files=.*/opcache.max_accelerated_files=10000/" /etc/php/7.3/fpm/php.ini
sed -i "s/;opcache.memory_consumption=.*/opcache.memory_consumption=128/" /etc/php/7.3/fpm/php.ini
sed -i "s/;opcache.save_comments=.*/opcache.save_comments=1/" /etc/php/7.3/fpm/php.ini
sed -i "s/;opcache.revalidate_freq=.*/opcache.revalidate_freq=1/" /etc/php/7.3/fpm/php.ini

# PHP 7.3 und apache2 neu starten
service php7.3-fpm restart
service apache2 restart

# Pfad festlegen – nicht ändern
ddir=$adir/data
occ=$adir/occ

# Nextcloud herunter laden und entpacken
cd /var/www
wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip

# Rechte auf den Webserver setzen
chown -R www-data:www-data /var/www

# Nextcloud automatisch installiere. Es kommt eine Meldung, wenn es erfolgreich war.

su - www-data -s /bin/bash -c "php $occ maintenance:install --database mysql \
 --database-name '$database' --database-user '$sql_user' --database-pass '$sql_user_pw' \
 --admin-user '$auser' --admin-pass '$apass' --data-dir '$ddir'"

# Hostname und evtl DynDNS in den Einstellungen von Nextcloud
# schreiben. Ohne dem habt ihr kein Zugriff auf Nextcloud

sudo -u www-data php $occ config:system:set trusted_domains 0 --value=$trust
sudo -u www-data php $occ config:system:set trusted_domains 0 --value=$trust1
sed -i "s/output_buffering=.*/output_buffering='Off'/" $adir/.user.ini

# Cron aktivieren
sudo -u www-data php $occ background:cron

# Memory Cache anlegen. Ohne dem kommt ein Fehler
sed -i '/);/d' $adir/config/config.php

cat <<EOF >>$adir/config/config.php
'logfile' => '$adir/nextcloud.log',
'logtimezone' => 'Europe/Berlin',
'memcache.local' => '\\OC\\Memcache\\APCu',
);
EOF

# Apache stopen um die Nextcloud Daten zu optimieren. Ist erforderlich.
service apache2 stop
sudo -u www-data php $occ db:add-missing-indices
sudo -u www-data php $occ db:convert-filecache-bigint
sudo -u www-data php $adir/cron.php

# Cron anlegen

(crontab -u www-data -l ; echo "*/5 * * * * php -f $adir/cron.php > /dev/null 2>&1") | crontab -u www-data -

# Apache starten
service apache2 start

# MySQL Einstellungen für Nextcloud

cat <<EOF > /etc/mysql/conf.d/mysql.cnf
[mysql]
innodb_buffer_pool_size=1G
innodb_io_capacity=4000
EOF

# MySQL restart
service mysql restart

# Fertig. Viel Spaß
Die Anleitung wurde so geschrieben, dass man alle Befehle in ein Script
kopieren kann. Einfach die erforderliche Daten (User,Passwort usw)
ergänzen und Script ausführen.

Bekannte Fehler:
[proxy_fcgi:error] AH01071: Got error ‘Primary script unknown’, referer: ….

Durch die If Abfrage bekommt man die Datei angezeigt, die den
Fehler verursacht hat.Wenn bei euch der Fehler auftritt,
einfach http://eureseite.de/admin aufrufen.

<If "-f %{SCRIPT_FILENAME}">
        SetHandler "proxy:unix:/run/php/php7.3-fpm.sock|fcgi://localhost"
</If>

Docker auf Kali Linux 2020.1 aarch64 (arm64) Raspberry 4 installieren

Neuste Dateien von download.docker.com
herunterladen und installieren.
Im Moment ist das aktuell:

wget https://download.docker.com/linux/debian/dists/buster/pool/stable/arm64/docker-ce-cli_19.03.5~3-0~debian-buster_arm64.deb
dpkg -i docker-ce-cli_19.03.5~3-0~debian-buster_arm64.deb

wget https://download.docker.com/linux/debian/dists/buster/pool/stable/arm64/containerd.io_1.2.6-3_arm64.deb
dpkg -i containerd.io_1.2.6-3_arm64.deb

wget https://download.docker.com/linux/debian/dists/buster/pool/stable/arm64/docker-ce_19.03.5~3-0~debian-buster_arm64.deb
dpkg -i docker-ce_19.03.5~3-0~debian-buster_arm64.deb

Die Reihenfolge der Installation ist einzuhalten, ansonsten kommt ein Fehler.

Docker beim Systemstart starten:
systemctl enable docker

Docker manuell starten:
systemctl start docker

Überprüfen ob docker läuft:
systemctl status docker

Für zukünftige Updates:

curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
echo 'deb [arch=arm64] https://download.docker.com/linux/debian buster stable' > /etc/apt/sources.list.d/docker.list

Ob das mit den automatischen Updates mit apt update klappt, konnten wir leider noch nicht testen.

.htaccess Verzeichnis Schutz mit dynDNS Zugriff ohne Passwort

Wir haben ein Update von unserem htaccess Generator erstellt.
Die Version htpasswdgen_v2.sh hat folgende Änderung:
– Die Variablen wurden auf Apache 2.4 geändert
– DynDNS hinzugefügt

Wozu dynDNS?
Wenn ihr euren dynDNS eintragt, entfällt der Anmelde Dialog für euch.
Beim starten des Scripts müsst ihr aber ein Benutzer und ein
Passwort eingeben, ansonsten funktioniert der Schutz nicht.

Mit dem folgenden Script könnt ihr einen Ordner mit .htaccess
und .htpasswd schützen. Folgende Schritte sind notwendig: 
1. Ihr loggt euch mit ssh auf eure Domaine ein
2. Ihr ladet das Script mit: wget https://www.gebert.it/htpasswdgen_v2.sh herunter
3. Das Script muss das Recht ausführen bekommen und zwar mit: chmod +x htpasswdgen_v2.sh
4. Das Script mit sh htpasswdgen_v2.sh ausführen
5. Nun fragt das Script nach den Ordner, DynDNS, User und dem Passwort und legt alles an.

Quelltext htpasswdgen_v2.sh

#!/bin/bash
### © Gebert iT Consult ###

# https://httpd.apache.org/docs/2.4/upgrading.html
#
# New rule apache 2.4
# Require all denied
# old
# Order deny,allow
# Deny from all

# New rule apache 2.4
# Require all granted
# old
# Order allow,deny
# Allow from all

# New rule apache 2.4
# Require host example.org
# old
# Order Deny,Allow
# Deny from all
# Allow from example.org

clear
RED=’\033[0;31m’
YEL=’\033[1;33m’
NC=’\033[0m’

echo "Kopiert das Script in euer Root Verzeichnis."
echo "Wollt ihr ein Ordner z.B. privat/geheim schützen"
echo "wird nicht der ganze Pfad /usr/srv/web/user/privat/geheim"
echo "benötigt. Gebt einfach privat/geheim ein"
echo "Wichtig: Ohne / am Ende des Pfades"
echo -e "${RED} Wollt ihr das aktuelle Verzeichnis schützen"
echo -e "${RED} einfach Enter drücken"
echo -e "${YEL}"
echo -e "Bitte geben Sie das Verzeichnis an:"
read ordner

if [ -z "$ordner" ];
then
verzeichnis=$(pwd)
else
verzeichnis=$(pwd)/$ordner
fi

echo "Bitte gebt euren DynDNS ein:"
echo "oder einfach leer lassen"
read dyn

if [ -z "$dyn" ];
then
dns=
else
dns="Require forward-dns $dyn"
fi

cat > $verzeichnis/.htaccess <<EOF
AuthType Basic
AuthName "Bitte User und Passwort eingeben"
AuthUserFile $verzeichnis/.htpasswd
Require valid-user
$dns
EOF

echo -e "${YEL}Bitte geben Sie den User an:"
read user
echo -e "${YEL}Bitte geben Sie das Passwort für diesen User an:"
read pw
htpasswd -cbB $verzeichnis/.htpasswd $user $pw
echo -e "${NC} Das Verzeichnis ist nun geschützt"

Nach dem reboot das sshkey Passwort nicht erneut eingeben

Jetzt Fragen sich vielleicht einige: Warum nicht ein sshkey ohne
Passwort erstellen?
Das wäre auch eine Möglichkeit, aber der Computer ist mit einem
Passwort geschützt und beim Ausbau der Festplatte, bräuchte man
nur den sshkey kopieren und würde auf die Server kommen.

Das ganze läuft auf einen Rasspberry PI 4.

Folgende Fehler traten auf:

Pseudo-terminal will not be allocated because stdin is
not a terminal.

Der Fehler wird durch -tt wie im Script angegeben behoben.

Permission denied (publickey,password)
Obwohl ein sshkey beim ssh Befehl mit angegeben wurde, hat crontab diesen Fehler verursacht. Crontab finden das mit ssh-add gespeicherte Passwort nicht. In der Shell funktionierte das Script.
Mit keychain und ein Perl Script läuft auch cron.

Error: Problem adding; giving up
Das Passwort vom sshkey wird vom crontab nicht gefunden.
Abhilfe schafft keychain.

Warning: Unable to extract fingerprint from keyfile /home/pi/.ssh/server.id_rsa.pub, skipping
Der Pfad zum sshkey stimmt nicht.

Installation und Konfiguration

Benötigte Pakete installieren
sudo apt install keychain libpam-ssh-agent-auth

Mit diesem Befehl wird der ssh-agent gestartet und euer Passwort für den sshkey gespeichert.
Der sshkey liegt im Ordner ~/.ssh/. zb server.id_rsa
Es muss der genaue Name vom sskey angegeben werden.

eval `keychain --agents ssh --eval server.id_rsa`

In diesem Beispiel werden wir auf dem PI ein cronjob anlegen,
der jeden Monat ausgeführt werden soll.
Viele Webhoster bieten kein Cronjob an, also basteln wir uns
selbst einen. 🙂

Mit dem User pi einen cronjob anlegen.

crontab -e
# Jeden Monat am 30 um 23:59
 59 23 30 * * bash ~/scripts/rotate.sh

Das Verzeichnis scripts erstellen.
mkdir ~/scripts

Das Script findagent.pl in den Ordner ~/scripts legen.
chmod +x ~/scripts/findagent.pl

Das Perl Script findagent.pl ist nicht von uns. Die Quelle steht im Script.

[bash]
#!/usr/bin/perl -w

# https://serverfault.com/questions/92683/execute-rsync-command-over-ssh-with-an-ssh-agent-via-crontab

# inside your cron script add the line:
# eval `{path to script}/findagent.pl`

use strict;
my $agents = `ls -tr /tmp/ssh-*/*`;
my @agents;
(@agents) = split/\n/,$agents;

my $sshpid = `ps aux|grep ssh-agent|grep -v grep|awk ‘{print \$2}’|head -1`;
chomp($sshpid);
my @parts;
for (@agents) {
chomp($_);
if (!$_) { next; }
my $agentfile = $_;
(@parts) = split/\./,$agentfile;
my $masterpid = `ps aux|grep $parts[1]|grep enlightenment`;
if ($agentfile =~ m/$parts[1]/) {
my $line1 = "SSH_AUTH_SOCK=" . $agentfile . ‘; export SSH_AUTH_SOCK’;
my $line2 = ‘SSH_AGENT_PID=’ . $sshpid . ‘; export SSH_AGENT_PID;’;
my $line3 = ‘echo Agent pid ‘ . $sshpid . ‘;’;
print("$line1\n$line2\n$line3\n");
last;
} else {
next;
}
}
[/bash]

Script rotate.sh mit folgendem Inhalt erstellen.
vi ~/scripts/rotate.sh

#!/bin/bash
eval `$HOME/scripts/findagent.pl`
/usr/bin/ssh -i /home/pi/.ssh/server.id_rsa user@euer_hoster.de -tt "/web_scripts/web.sh"

 
chmod +x ~/scripts/rotate.sh

Per ssh auf euren Webserver.
ssh user@euer_hoster.de

Ordner anlegen.
mkdir -p /web_scripts/log_files

Das Script web.sh auf eurem Webspace mit folgenden Inhalt füllen.
vi /web_scripts/web.sh

#!/bin/bash
mv /httpdocs/verkauf.db /web_scripts/log_files/$(date "+%y.%m.%d")_verkauf.db
touch /httpdocs/verkauf.db

 
chmod +x /web_scripts/web.sh

Ab jetzt geht es auf dem PI wieder weiter.

Nach einem reboot vom PI soll das sshkey Passwort nicht erneut
eingegeben werden. Wie das funktioniert folgt nun.

sudo cp ~/.ssh/known_hosts /etc/ssh/sudo_authorized_keys
echo "Defaults env_keep += SSH_AUTH_SOCK" | sudo tee /etc/sudoers.d/00_SSH_AUTH_OK
sudo chmod 0440 /etc/sudoers.d/00_SSH_AUTH_OK

Die Datei /etc/pam.d/sudo muss auf genau das folgende
geändert werden.
sudo vi /etc/pam.d/sudo

#%PAM-1.0

auth [success=2 default=ignore] pam_ssh_agent_auth.so file=/etc/ssh/sudo_authorized_keys
@include common-auth
@include common-account
@include common-session-noninteractive

session required pam_permit.so
session required pam_limits.so

sudo reboot
Nach dem reboot benötigt ssh nicht mehr das Passwort für den sshkey.
ENDE

Wollt ihr lieber nach jedem reboot eures PI für die ssh Verbindung das
Passwort eingeben? Auch das geht und zwar:

vi ~/.bashrc

eval `keychain --eval --agents ssh server.id_rsa`

Wichtig: Ab jetzt geht es auf dem PI weiter nicht ausführen.
Falls ihr das schon gemacht habt, einfach die Änderung wieder ändern.

Dockerfile (Image) von github auf Linux/Mac installieren

Folgende Programme werden benötigt:

curl -sSL https://get.docker.com | sh
sudo usermod -aG docker Username
sudo apt-get install -y libffi-dev libssl-dev
sudo apt-get install -y python python-pip
sudo apt-get remove python-configparser
sudo pip install docker-compose

Beim Mac wird nur folgendes installiert:
https://hub.docker.com/editions/community/docker-ce-desktop-mac
Direkt Link:
https://download.docker.com/mac/stable/Docker.dmg
https://download.docker.com/kitematic/Kitematic-Mac.zip

Mit sudo docker run hello-world kann man testen ob der Dienst docker läuft.

Mit diesem Befehl holen wir die Dateien von github:
git clone https://github.com/iprobedroid/swgoh-arena-tracker.git

In das Verzeichnis wechseln:
cd swgoh-arena-tracker

# In diesem Beispiel muss vorher das Dockerfile wie folgt angepasst werden:


# vi Dockerfile
# Neuer Inhalt:
FROM iprobedroid/swgoh-arena-tracker:beta-9
ENV DISCORD_WEB_HOOK=”https://discordapp.com/api/webhooks/6511/aFDxkd-jp”
ENV ARENA_TYPE=FLEET
ENV ALLY_CODES=”123456789, 987654321, 111222333
# Ende Inhalt Dockerfile

Mit diesem Befehl wird das Image erstellt:
docker build -t="foo" .
foo ist frei wählbar. Unter Linux/Mac sollten Leerzeichen und Sonderzeichen nicht benutzt werden.

Das Programm wird mit diesem Befehl gestartet:
docker run -i -t foo
Im Hintergrund ausführen:
docker run -d foo
oder so:
dockerd

Zum testen:
sudo service docker status

Mit diesem Befehl kann man das Image wieder löschen:
docker images
IMAGE ID suchen und so löschen:
docker image rm 60dd3f34bc78 = (IMAGE ID)

WordPress mit wp-cli automatisch in 3 Minuten auf eurem Webspace installieren

Mit diesem Script installiert ihr WordPress mit euren Plugins völlig automatisch und bereinigt es von den Beispiel Einträgen. Ihr müsst lediglich vorher eure Daten eintragen, eventuell eure eigenen Plugins hinzufügen. Einfach das Script in euer Root Verzeichnis mit dem ihr Zugriff über den Browser habt, kopieren. Mit ssh auf euren Wepspace (Hoster) einloggen und per sh Scriptname das Script aufrufen.

Das folgende ist nicht notwendig, aber eine zusätzliche Möglichkeit eure Plugins automatisch zu installieren.
Ihr könnt mit Hilfe eines login.wordpress.org Konto eure Plugins favorisieren, indem ihr auf das Herz klickt.

Im Abschnitt WordPress.org Konto einfach euren Benutzernamen eintragen.

Was kann das Script?

    Vollkommen automatisch WordPress installieren
  • WordPress in eine vorhandenen Datenbank mit eigenem Tabellen Prefix installieren
  • Leere Seiten mit Überschrift erstellen
  • Eigenes Menü erstellen
  • Kategorien und Schlagwörter anlegen
  • Statische Seite oder Beiträge anzeigen
  • WordPress.org Favoriten Plugins automatisch installieren
  • Automatisch wp-cli installieren, falls noch nicht vorhanden
  • Ordner Eingabe abfragen, indem WordPress installiert werden soll
  • Abfragen ob SSL genutzt wird
  • Alle Themen löschen, außer die aktive
  • Medien in einem Ordner ablegen
  • Untertitel der Seite benennen
  • Standard Beitrag löschen
  • Unnütze Standard Plugins deinstallieren
  • Eigene Plugins installieren
  • Permalinks ändern
  • Automatisch eine WordPress .htaccess Datei erstellen, wird für die Permalinks benötigt
  • Suchmaschinen Index ein oder ausschalten
  • Automatisch eine Impressum Seite erstellen
  • Sicherheitskey von der wp-config automatisch ändern
  • Andere nützliche wp Befehle sind im Script dokumentiert
  • Hier ist das Script. Viel Spaß damit

    [bash]
    #!/bin/bash
    # Info https://developer.wordpress.org/cli/commands/
    # Info https://comlounge.net/wordpress-kommandozeile-wp-cli/
    # Info https://wp-cli.org/de/

    #######################################################
    # #
    # Bitte eure Daten eintragen: #
    # #
    #######################################################
    #
    # Bitte deine Webseite genau wie im Beispiel angeben
    # Beispiel: gebert.it/ oder www.gebert.it/
    web=gebert.it/
    #
    #
    #######################################################
    # #
    # Server Daten von eurem Hoster #
    # #
    #######################################################
    #
    ### Datenbank Name ###
    dbname=datenbank
    ### Benutzer Name Datenbank ###
    dbuser=benutzer
    ### Passwort Datenbank ###
    dbpass=pw
    ### Datenbank Host ###
    dbhost=host.de
    #
    #
    #######################################################
    # #
    # WordPress Daten #
    # #
    #######################################################
    #
    ### WordPress Benutzer Name ###
    wpuser=admin
    ### WordPress Passwort ###
    wppass=geheim
    ### E-Mail für WordPress ###
    wpmail=email
    ### Seiten Name ###
    sitename="Meine Seite"
    ### Seite Home und IMPRESSUM wird automatisch erstellt. Nicht in mypages schreiben ###
    ### Soll kein Menü erstellt werden, mypages mit # auskommentieren ###
    mypages=News,"Über Uns"
    ### Meine Kategorien und Schlagwörter erstellen ###
    category=Internet,Hardware,Software,Android,macOS,Linux,Windows,Programme,Apps,Sicherheit,WordPress
    ### Als Beiträge (ja) oder statische Seite (nein) die Startseite anzeigen? ###
    my_blog=ja
    #
    #
    #######################################################
    # #
    # WordPress.org Konto für Favoriten Plugins #
    # #
    #######################################################
    #
    ### Plugins von login.WordPress.org konto installieren ###
    # Benutzer von WordPress.org eintragen – Nicht unbedingt nötig #
    wordpressuser=
    #
    #
    #######################################################
    # #
    # Ab hier nichts ändern #
    # #
    #######################################################

    type clear >/dev/null 2>&1 && clear
    RED=’\033[0;31m’
    YEL=’\033[1;33m’
    CY=’\033[0;36m’
    NC=’\033[0m’

    printf "${RED}"
    echo " ====================================================================================="
    echo ""
    echo " wp cli WordPress Installer Script, by Gebert it Consult"
    echo ""
    echo " ====================================================================================="
    echo ""
    echo ""
    printf "${CY}"
    echo " ====================================================================================="
    echo ""
    echo " Das Script muss in dem Hauptordner von eurer Domain gelegt"
    echo " werden, der vom Browser erreichbar ist."
    echo " Eure Seite lautet z.b. http://www.gebert.it/ und das Script"
    echo " fragt euch, in welchem Ordner WordPress installiert werden soll."
    printf " Die URL schaut dann so aus: ${YEL} http://www.gebert.it/EUER_ORDNER_EINFGABE"
    echo ""
    printf "${RED} Achtung: Am Ende des Script wird gefragt ob die Webseite auf https (SSL) läuft."
    printf "${CY}"
    echo ""
    echo ""
    echo " ====================================================================================="
    printf "${NC}"
    echo ""

    echo " Ist wp-cli installiert?"
    # Es wird überprüft ob wp-cli installiert ist, wenn nicht, wird es installiert
    test -x wp >/dev/null 2>&1 && echo " wp ist installiert" ||
    {
    echo " wp-cli wird installiert, bitte warten"
    curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli-nightly.phar >/dev/null 2>&1
    mv wp-cli-nightly.phar wp
    chmod 555 wp
    php -d memory_limit=512M wp package install anhskohbo/wp-cli-themecheck >/dev/null 2>&1
    # Sicherheitstest wp wp-sec check
    php -d memory_limit=512M wp package install markri/wp-sec >/dev/null 2>&1
    # Favoriten anzeigen wp plugin favorites matt –verbose
    php -d memory_limit=512M wp package install mikedance/wp-cli-favorite-plugins >/dev/null 2>&1
    }
    export PATH="$PATH:$(pwd)/"

    # Ordner Abfragen indem WordPress entpackt werden soll
    echo ""
    printf "${YEL} Bitte den Ordner angeben in dem WordPress installiert werden soll."
    printf "${YEL} Der Ordner wird automatisch erstellt."
    echo ""
    printf "${RED} Nur den Ordner Namen angeben, keinen Pfad: ${NC}"
    read apwd
    test -d $apwd && printf "${RED} Ordner ist vorhanden!! Script neu starten. ${NC}""" && echo "" && exit || mkdir $apwd
    cd $apwd
    echo ""
    echo ""

    # Aktuellen Ordner Namen ermitteln
    apwd=${PWD##*/}

    printf "${YEL} WordPress Seite:${NC}"
    echo ""
    echo " Webseite: http://$web$apwd/"
    echo ""
    printf "${YEL} Server Daten:${NC}"
    echo ""
    echo " Datenbank: $dbname"
    echo " Benutzer: $dbuser"
    echo " Passwort: $dbpass"
    echo " Host: $dbhost"
    echo ""
    printf "${YEL} WordPress Daten:${NC}"
    echo ""
    echo " Benutzer: $wpuser"
    echo " Passwort: $wppass"
    echo " E-Mail: $wpmail"
    echo ""
    printf "${YEL} Die https (SSL) Frage kommt noch. ${NC}"
    echo ""
    echo ""

    # Abfrage ob alle Daten richtig eingegeben wurden
    printf "${RED} Is das so ok? (J/n)"
    read nein
    if [ "$nein" = "n" ];
    then
    echo " Bitte die Daten richtig eingeben." && printf "${NC}" && exit
    else
    printf "${NC}"
    echo ""
    fi

    # Deutsches WordPress download
    wp core download –locale=de_DE
    # Englisches WordPress download
    # wp core download

    # wp-config table_prefix ändern auf Ordner Namen
    p1=_wp_
    mid=$(LC_CTYPE=C tr -dc 0-9 < /dev/urandom | head -c 3)
    prefix=$apwd$mid$p1
    # sed -i "s/^\$table_prefix \= .*/\$table_prefix \= ‘$prefix’/1" $(pwd)/wp-config.php
    # cat $(pwd)/wp-config.php

    # wp-config wird mit den benötigten Daten erstellt
    wp core config –dbhost="$dbhost" –dbuser="$dbuser" –dbpass="$dbpass" –dbname="$dbname" –extra-php <<PHP
    define( ‘WP_DEBUG’, true );
    define( ‘SAVEQUERIES’, true );
    define( ‘DISALLOW_FILE_EDIT’, true );
    define( ‘WP_MEMORY_LIMIT’, ’64M’ );
    \$table_prefix = ‘$prefix’;
    PHP
    echo " wp-config wurde erstellt"

    #define( ‘WP_SITEURL’, ‘http://$web$apwd’ );
    #define( ‘WP_HOME’, ‘http://$web$apwd/’ );
    #define( ‘RELOCATE’, true );

    # Sicherheitskey in wp-config automatisch neu generieren
    wp config shuffle-salts

    # Doppelten $table_prefix Eintrag aus wp-config löschen
    # macOS Syntax
    # sed -i ” "s/^\$table_prefix \= ‘wp_’\;//1" $(pwd)/wp-config.php
    # Linux Syntax
    sed -i "s/^\$table_prefix \= ‘wp_’\;//1" $(pwd)/wp-config.php

    # WordPress Datenbank wird installiert
    echo " WordPress Datenbank wird installiert"
    wp core update-db >/dev/null 2>&1

    # WordPress Benutzerdaten automatisch eintragen
    echo " Die Benutzerdaten für WordPress werden automatisch eingetragen"
    wp core install –url="$web" –title="$sitename" –admin_user="$wpuser" –admin_password="$wppass" –admin_email="$wpmail" –skip-email

    # Abfrage ob dieses Seite auf SSL läuft
    echo " Aktuelle Webseite URL:"
    wp option get siteurl
    printf "${RED} Habt ihr https:// (SSL)? (J/n) ${NC}"
    read nein2
    if [ "$nein2" = "n" ];
    then
    wp option update siteurl http://$web$apwd
    wp option update home http://$web$apwd
    else
    wp option update siteurl https://$web$apwd
    wp option update home http://$web$apwd
    fi
    echo ""
    echo " Webseiten URL wurde angepasst"
    echo ""
    printf "${YEL}"
    echo ""
    echo "================================================================="
    echo ""
    echo " WordPress wird installiert und konfiguriert"
    echo ""
    echo "================================================================="
    printf "${NC}"
    echo ""
    echo ""

    # Deutsche Sprache installieren
    # echo " Deutsche Sprache wird installiert"
    # wp language core install de_DE

    echo " Theme Sprachpaket update wird installiert"
    wp language theme update de_DE

    # Deutsche Sprache aktivieren
    # wp site switch-language de_DE

    # Untertitel der Seite ändern
    wp option update blogdescription "Ein Blog der anderen Art"

    # Medien in einem Ordner
    wp option update uploads_use_yearmonth_folders 0

    # Kommentare müssen genehmigt werden
    wp option update comment_moderation 1

    # Standard Beitrag löschen
    wp post delete 1 –force

    # Permalinks auf Beitragsname ändern
    wp rewrite structure ‘/%postname%/’ –hard
    echo " Warning ist gefixed mit der .htaccess am Ende"
    wp rewrite flush –hard
    echo " Warning ist gefixed mit der .htaccess am Ende"

    # Standard Themen löschen
    wp theme list –status=inactive –field=name | while read THEME; do wp theme delete $THEME; done;

    # Beispiel Seite löschen
    wp post delete 2 –force

    # Datenschutz Seite löschen
    wp post delete 3 –force

    # Suchmaschinen indexieren zulassen und einschalten
    wp option update blog_public 1

    # Nur 7 Einträge pro Archiv Seite anzeigen
    wp option update posts_per_page 7

    # Home Seite erstellen
    wp post create –post_type=page –post_title=Home –post_status=publish –post_author=$(wp user get $wpuser –field=ID)

    # Test Beiträge erstellen
    # curl http://loripsum.net/api/4 | wp post generate –post_content –count=2

    # Child Theme erstellen
    # wp scaffold child-theme "Child Theme Divi" –parent_theme=Divi –theme_name="Child Theme Divi" –author="Michael Gebert" –author_uri="https://www.gebert.it" –theme_uri="https://www.gebert.it" –activate –force

    # IMPRESSUM erstellen
    echo "Impressum Seite wird erstellt"
    # wp post create –post_type=page –post_status=publish –post_author=$wpuser –post_title=IMPRESSUM
    wp post create –post_type=page –post_status=publish –post_author=$wpuser –post_content="$(curl https://www.gebert.it/_/muster_impressum.html)" –post_title=Impressum

    # IMPRESSUM als Datenschutzseite
    wp option update wp_page_for_privacy_policy $(wp post list –post_type=page |grep impressum | awk ‘{print $1}’)

    # Meine Seiten erstellen
    if [ "$mypages" ]; then
    export IFS=","
    for page in $mypages; do
    wp post create –post_type=page –post_status=publish –post_author=$wpuser –post_title="$(echo $page | sed -e ‘s/^ *//’ -e ‘s/ *$//’)"
    done
    fi

    # create a navigation bar
    wp menu create "standardmenu"

    # Eigene Seiten ins Standard Menü
    export IFS=" "
    for pageid in $(wp post list –order="ASC" –orderby="date" –post_type=page –post_status=publish –posts_per_page=-1 –field=ID –format=ids); do
    wp menu item add-post standardmenu $pageid
    done

    # Erstelltes Menü aktivieren
    if [ "$mypages" ]; then
    wp menu location assign standardmenu menu-1
    fi

    # Meine Kategorien und Schlagwörter erstellen
    echo "Kategorien werden erstellt"
    if [ "$category" ]; then
    # wp term delete category 1
    export IFS=","
    for tags in $category; do
    wp term create category $tags
    wp term create post_tag $tags
    done
    fi

    # Beiträge oder statische Seite?
    if [ "$my_blog" = "ja" ]; then
    echo "WordPress wird als Blog installiert"
    else
    echo "Wordpress wird als Homepage installiert"
    wp option update show_on_front ‘page’
    wp option update page_on_front $(wp post list –post_type=page –post_status=publish –posts_per_page=1 –pagename=home –field=ID –format=ids)
    fi

    # Plugin löschen
    wp plugin delete hello
    wp plugin delete akismet

    # Plugins installieren
    wp plugin install child-theme-configurator –activate
    wp plugin install debug-bar –activate
    wp plugin install cookie-notice –activate
    wp plugin install file-manager-advanced –activate
    wp plugin install wordpress-importer –activate
    wp plugin install google-sitemap-generator –activate
    wp plugin install google-captcha –activate
    wp plugin install google-analytics-dashboard-for-wp –activate
    wp plugin install wp-statistics –activate
    wp plugin install syntaxhighlighter –activate
    wp plugin install shortcodes-ultimate
    wp plugin install simple-custom-css –activate
    wp plugin install code-snippets

    # WordPress.org Favoriten installieren
    if [ "$wordpressuser" ]; then
    wp plugin favorites $wordpressuser | xargs wp plugin install –activate
    fi

    # Revesionen verwalten
    #
    # Alle amzeigen: wp revisions list
    # Alle löschen außer die letzten 3 von jedem Posting: wp revisions clean 3
    wp plugin install https://github.com/trepmal/wp-revisions-cli/archive/master.zip –activate

    # Plugins die nützlich sein können (Backup)
    # wp plugin install loco-translate
    # wp plugin install duplicator
    # wp plugin install classic-editor
    # wp plugin install classic-editor-addon
    # wp plugin install all-in-one-wp-migration
    # wp plugin install ml-slider

    ################################################################################
    # #
    # Verschiedene nützliche Befehle #
    # #
    ################################################################################

    # Plugin von einem eigenen Backup Server installieren
    # wp plugin install https://www.Domaine.de/_wp_plugins_backup_/divi-builder.zip

    # Plugin Suchen
    # wp plugin search dsgnwrks

    # Alle Plugin updaten
    # wp plugin update –all

    # Plugin löschen
    # wp plugin –deactivate uninstall bbpress

    # Plugin deaktivieren
    # wp plugin –deactivate –all
    # wp plugin deactivate 404-redirected

    # Alle Plugins aktivieren
    # wp plugin activate –all

    # Alle SPAM Kommentare auf einmal löschen
    # wp comment delete $(wp comment list –status=spam –format=ids)

    # Wenn die Datenbank zu groß oder die Seite langsam ist – Müll entsorgen
    # wp transient delete-all

    # Suchen und Ersetzen in der Datenbank (-dry-run zum testen)
    # wp search-replace ‘http://example.dev‘ ‘http://example.com‘ –skip-columns=guid

    # wp-cli update
    # wp cli update –nightly

    # Datenbank Backup
    # wp db export –add-drop-table
    # wp db import wordpress_dbase.sql

    # E-Mail vom Admin ändern
    # wp option update admin_email someone@example.com

    ################################################################################
    # #
    # wp-cli addons #
    # #
    ################################################################################

    # Theme testen mit wp themecheck
    wp plugin install theme-check –activate

    # Favoriten anzeigen wp plugin favorites matt –verbose
    # Favoriten Plugins von wordpress.org installieren mit
    # wp plugin favorites <user> | xargs wp plugin install –activate
    # Alle installieren ausser die 2 genannten
    # wp plugin favorites <user> | grep -vwE "(hello-dolly|akismet)" | xargs wp plugin install –activate

    # Standard WordPress .htaccess, wird für die Permalinks benötigt
    echo " .htaccess Datei für WordPress erstellen"

    cat > .htaccess <<EOF
    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ – [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    EOF

    printf "${CY}"
    echo ""
    echo " ================================================================="
    echo ""
    echo " Installation ist beendet. Dein username/password lautet:"
    echo ""
    echo " Username: $wpuser"
    echo " Password: $wppass"
    echo " E-Mail: $wpmail"
    echo " Webseite: http://$web$apwd"
    echo ""
    echo " ================================================================="
    printf "${NC}"
    echo ""
    [/bash]

    Automatische WordPress Installation mit WP CLI auf dem Mac

    Wer wollte nicht schon einmal, WordPress in 3 Minuten mit den Plugins, die man gerne möchte, neu installieren. Auf dem MAC geht es ganz automatisch.
    Folgende Programme werden dazu benötigt:

      wb-cli
      brew
      php
      composer
      laravel valet
      mariadb
      Und natürlich WordPress

    Im ersten Schritt installiert das Script all diese Programme und im zweiten, wird WordPress installiert und konfiguriert. Wenn nach der Installation das Script erneut aufgerufen wird, prüft das Script, ob die Installation schon durchgeführt wurde und würde nur eine neue WordPress Seite installieren. Bekanntlich hat man mehr, als eine Seite. Außerdem braucht man vielleicht mehr, als nur eine. Mit dem Script macht es zumindest Spaß, WordPress zu installieren.

    Mögliche Probleme:

    Falls es Probleme beim installieren gibt, einfach diese Datei mit
    rm $HOME/.composer/vendor/mariadb_installed
    löschen.
    Das zufällige Passwort erstellen habe ich ausgeschaltet, da es nicht zu 100% funktioniert.

    Und nun folgt das Script…

    [bash]
    #!/bin/bash
    # Info https://developer.wordpress.org/cli/commands/
    # Info https://comlounge.net/wordpress-kommandozeile-wp-cli/
    # Info https://wp-cli.org/de/

    #######################################################
    # #
    # WordPress Daten #
    # #
    #######################################################
    #
    wpuser=admin
    wppass=geheim
    wpmail=offline@offline.test
    sitename="Test Umgebung"
    # Seite Home und IMPRESSUM wird automatisch erstellt. Nicht in mypages schreiben
    # Soll kein Menü erstellt werden, mypages mit # auskommentieren
    mypages=News,"Über Uns"
    # Meine Kategorien und Schlagwörter erstellen
    category=Internet,Hardware,Software,Android,macOS,Linux,Windows,Programme,Apps,Sicherheit,WordPress
    # Als Beiträge (ja) oder statische Seite (nein) die Startseite anzeigen?
    my_blog=ja
    #
    #
    #######################################################
    # #
    # WordPress.org Konto für Favoriten Plugins #
    # #
    #######################################################
    #
    ### Plugins von login.WordPress.org konto installieren ###
    ### Benutzer von WordPress.org eintragen – Nicht unbedingt nötig ###
    wordpressuser=
    #
    #
    #######################################################
    # #
    # Ab hier nichts ändern #
    # #
    #######################################################
    #
    #
    clear
    RED=’\033[0;31m’
    YEL=’\033[1;33m’
    CY=’\033[0;36m’
    NC=’\033[0m’

    echo "${RED}"
    echo " ====================================================================================="
    echo ""
    echo " wp cli WordPress Installer Script, by Gebert it Consult"
    echo ""
    echo " ====================================================================================="
    echo "${NC}"

    echo " Ist wp-cli installiert?"
    # Es wird überprüft ob wp-cli installiert ist, wenn nicht, wird es installiert
    type wp >/dev/null 2>&1 && echo " wp ist installiert" ||
    {
    echo " wp-cli wird installiert"
    curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar >/dev/null 2>&1
    mv wp-cli.phar /usr/local/bin/wp
    chmod 555 /usr/local/bin/wp
    php -d memory_limit=512M "$(which wp)" package install anhskohbo/wp-cli-themecheck >/dev/null 2>&1
    # Sicherheitstest wp wp-sec check
    php -d memory_limit=512M "$(which wp)" package install markri/wp-sec >/dev/null 2>&1
    # Favoriten anzeigen wp plugin favorites matt –verbose
    php -d memory_limit=512M "$(which wp)" package install mikedance/wp-cli-favorite-plugins >/dev/null 2>&1
    # wp login create username – Ein link zum Anmelden wird erstellt
    wp package install aaemnnosttv/wp-cli-login-command
    }

    # Es wird überprüft ob brew installiert ist, wenn nicht, wird es installiert
    type brew >/dev/null 2>&1 ||
    {
    echo " brew wird installiert"
    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null; }

    # Es wird überprüft ob php installiert ist, wenn nicht, wird es installiert
    type php >/dev/null 2>&1 ||
    {
    echo " php wird installiert"
    brew install php@7.1
    brew link –force php@7.1; }
    # So wird die neuste php Version installiert, die läuft aber nicht so gut
    # brew install homebrew/core/php
    # Bei php 7.3 muss pcre.jit ausgeschaltet werden, ansonsten kommt ein Fehler
    # sed -i ” "s/pcre.jit\=1/pcre.jit\=0/g" /usr/local/etc/php/7.3/php.ini

    # Es wird überprüft ob composer installiert ist, wenn nicht, wird es installiert
    type composer >/dev/null 2>&1 ||
    {
    echo " composer wird installiert"
    brew install composer; }

    # Dadurch kann man wp Leerzeichen und TAB drücken und sieht alle wp Befehle
    test -f /usr/local/bin/wp-completion.bash >/dev/null 2>&1 ||
    {
    curl -O https://raw.githubusercontent.com/wp-cli/wp-cli/master/utils/wp-completion.bash >/dev/null 2>&1
    mv wp-completion.bash /usr/local/bin/
    echo "source /usr/local/bin/wp-completion.bash" >> ~/.bash_profile
    }

    test -f $HOME/.composer/vendor/mariadb_installed >/dev/null 2>&1 ||
    {
    # php memory limit anzeigen
    echo " Auslesen was memory_limit für ein Wert hat"
    php -r "echo ini_get(‘memory_limit’).PHP_EOL;"
    # php –ini

    echo " Memory limit auf 1 GB erhöhen"
    sed -i ” "s/memory_limit \= .*/memory_limit \= -1/g" /usr/local/etc/php/7.1/conf.d/php-memory-limits.ini

    # Mit php -i | grep php.ini die aktuell geladene (Loaded Configuration File) php.ini finden und das limit ebenfalls erhöhen
    sed -i ” "s/^memory_limit \= .*/memory_limit \= -1/g" /usr/local/etc/php/7.1/php.ini; }

    # Es wird überprüft ob valet installiert ist, wenn nicht, wird es installiert
    type valet >/dev/null 2>&1 ||
    {
    echo " valet wird installiert"
    composer global require laravel/valet

    # Der Pfad wird in das Profile geschrieben
    echo "export PATH="$PATH:$HOME/.composer/vendor/bin"" >> ~/.bash_profile
    export PATH="$PATH:$HOME/.composer/vendor/bin" ; }

    # Es wird überprüft ob valet konfiguriert ist, wenn nicht, wird es installiert
    test -f $HOME/.composer/vendor/mariadb_installed >/dev/null 2>&1 ||
    {
    echo " valet konfigurieren"
    valet install; }

    # kleiner Test ob alles läuft
    echo " Läuft unser Server?"
    ping -t 2 geht-es.test

    # mysql wird installiert und als service eingetragen
    test -f $HOME/.composer/vendor/mariadb_installed >/dev/null 2>&1 ||
    {
    echo " mysql installieren"
    brew install mariadb
    brew services start mariadb; }

    touch $HOME/.composer/vendor/mariadb_installed
    echo "${CY}"
    echo ""
    echo "================================================================="
    echo " WordPress Installation"
    echo "================================================================="
    echo ""
    echo ""
    # Ordner Abfragen indem WordPress entpackt werden soll
    test -d ~/valet && echo "ok" || mkdir ~/valet
    cd ~/valet
    echo "${YEL} Der erstellte Ordner wird eine Domaine und in dem"
    echo "${YEL} wird wordpress installiert zb. http://EUER_ORDNER_EINFGABE.test"
    echo "${YEL} Der Ordner darf keine Sonderzeichen haben :-)"
    echo "${RED} Nur den Ordner Namen angeben, keinen Pfad"
    read apwd
    test -d $apwd && echo " Ordner ist vorhanden!! Script neu starten." && exit || mkdir $apwd
    cd $apwd
    echo "${NC}"

    # ssl einschalten
    valet secure

    # Ordner für den Webserver verlinken
    echo " Web URL wird angelegt"
    valet link
    valet park

    # Web URL
    echo " Angelegt Web URL anzeigen"
    valet links

    # Zufälligen Datenbank Name erstellen (nur bei localen Systemen sinnvoll
    dbname=$(LC_CTYPE=C tr -dc a-z0-9 < /dev/urandom | head -c 8)

    # Aktuellen Ordner Namen ermitteln
    apwd=${PWD##*/}

    # Deutsches WordPress download
    wp core download –locale=de_DE
    # Englisches WordPress download
    # wp core download

    # wp-config table_prefix ändern auf Ordner Namen
    p1=_wp_
    mid=$(LC_CTYPE=C tr -dc 0-9 < /dev/urandom | head -c 3)
    prefix=$apwd$mid$p1
    # sed -i "s/^\$table_prefix \= .*/\$table_prefix \= ‘$prefix’/1" $(pwd)/wp-config.php
    # cat $(pwd)/wp-config.php

    # wp-config wird mit den benötigten Daten erstellt
    wp core config –dbhost=localhost –dbuser=root –dbpass="" –dbname=$dbname –extra-php <<PHP
    define( ‘WP_DEBUG’, true );
    define( ‘SAVEQUERIES’, true );
    define( ‘DISALLOW_FILE_EDIT’, true );
    define( ‘WP_MEMORY_LIMIT’, ’64M’ );
    \$table_prefix = ‘$prefix’;
    PHP
    echo " wp-config wurde erstellt"

    # Sicherheitskey in wp-config automatisch neu generieren
    wp config shuffle-salts

    # Doppelten $table_prefix Eintrag aus wp-config löschen
    # macOS Syntax
    sed -i ” "s/^\$table_prefix \= ‘wp_’\;//1" $(pwd)/wp-config.php
    # Linux Syntax
    # sed -i "s/^\$table_prefix \= ‘wp_’\;//1" $(pwd)/wp-config.php

    # 12 Zeichen langes Passwort wird per Zufall erstellt
    # wppass=$(head /dev/urandom | LC_CTYPE=C tr -dc "[:print:]" | head -c 16)

    # Passwort in die Zwischenablage kopieren
    echo $wppass | pbcopy

    # WordPress Datenbank wird erstellt
    echo "Wordpress wird installiert"
    wp db create
    echo "wp db create ausgeführt"

    # WordPress Benutzerdaten automatisch eintragen
    echo " Die Benutzerdaten für WordPress werden automatisch eingetragen"
    wp core install –url="http://$apwd.test" –title="$sitename" –admin_user="$wpuser" –admin_password="$wppass" –admin_email="$wpmail" –skip-email
    # wp option update siteurl https://$apwd.test
    # wp option update home https://$apwd.test

    echo "${YEL}"
    echo "================================================================="
    echo ""
    echo " WordPress wird konfiguriert"
    echo ""
    echo "================================================================="
    echo "${NC}"

    # Deutsche Sprache installieren
    # echo " Deutsche Sprache wird installiert"
    # wp language core install de_DE

    echo " Theme Sprachpaket update wird installiert"
    wp language theme update de_DE

    # Deutsche Sprache aktivieren
    # wp site switch-language de_DE

    # Untertitel der Seite ändern
    wp option update blogdescription "Ein Blog der anderen Art"

    # Medien in einem Ordner
    wp option update uploads_use_yearmonth_folders 0

    # Kommentare müssen genehmigt werden
    wp option update comment_moderation 1

    # Standard Beitrag löschen
    wp post delete 1 –force

    # Permalinks auf Beitragsname ändern
    wp rewrite structure ‘/%postname%/’ –hard
    echo " Warning ist gefixed mit der .htaccess am Ende"
    wp rewrite flush –hard
    echo " Warning ist gefixed mit der .htaccess am Ende"

    # Standard Themen löschen
    wp theme list –status=inactive –field=name | while read THEME; do wp theme delete $THEME; done;

    # Beispiel Seite löschen
    wp post delete 2 –force

    # Datenschutz Seite löschen
    wp post delete 3 –force

    # Suchmaschinen indexieren zulassen und einschalten
    wp option update blog_public 1

    # Nur 7 Einträge pro Archiv Seite anzeigen
    wp option update posts_per_page 7

    # Home Seite erstellen
    wp post create –post_type=page –post_title=Home –post_status=publish –post_author=$(wp user get $wpuser –field=ID)

    # Test Beiträge erstellen
    # curl http://loripsum.net/api/4 | wp post generate –post_content –count=2

    # Child Theme erstellen
    # wp scaffold child-theme "Child Theme Divi" –parent_theme=Divi –theme_name="Child Theme Divi" –author="Michael Gebert" –author_uri="https://www.gebert.it" –theme_uri="https://www.gebert.it" –activate –force

    # IMPRESSUM erstellen
    echo "Impressum Seite wird erstellt"
    # wp post create –post_type=page –post_status=publish –post_author=$wpuser –post_title=IMPRESSUM
    wp post create –post_type=page –post_status=publish –post_author=$wpuser –post_content="$(curl https://www.gebert.it/_/muster_impressum.html)" –post_title=Impressum

    # IMPRESSUM als Datenschutzseite
    wp option update wp_page_for_privacy_policy $(wp post list –post_type=page |grep impressum | awk ‘{print $1}’)

    # Meine Seiten erstellen
    if [ "$mypages" ]; then
    export IFS=","
    for page in $mypages; do
    wp post create –post_type=page –post_status=publish –post_author=$wpuser –post_title="$(echo $page | sed -e ‘s/^ *//’ -e ‘s/ *$//’)"
    done
    fi

    # create a navigation bar
    wp menu create "standardmenu"

    # Eigene Seiten ins Standard Menü
    export IFS=" "
    for pageid in $(wp post list –order="ASC" –orderby="date" –post_type=page –post_status=publish –posts_per_page=-1 –field=ID –format=ids); do
    wp menu item add-post standardmenu $pageid
    done

    # Erstelltes Menü aktivieren
    if [ "$mypages" ]; then
    wp menu location assign standardmenu menu-1
    fi

    # Meine Kategorien und Schlagwörter erstellen
    echo "Kategorien werden erstellt"
    if [ "$category" ]; then
    # wp term delete category 1
    export IFS=","
    for tags in $category; do
    wp term create category $tags
    wp term create post_tag $tags
    done
    fi

    # Beiträge oder statische Seite?
    if [ "$my_blog" = "ja" ]; then
    echo "WordPress wird als Blog installiert"
    else
    echo "Wordpress wird als Homepage installiert"
    wp option update show_on_front ‘page’
    wp option update page_on_front $(wp post list –post_type=page –post_status=publish –posts_per_page=1 –pagename=home –field=ID –format=ids)
    fi

    # Plugin löschen
    wp plugin delete hello
    wp plugin delete akismet

    # Plugins installieren
    wp plugin install child-theme-configurator –activate
    wp plugin install debug-bar –activate
    #wp plugin install cookie-notice –activate
    #wp plugin install file-manager-advanced –activate
    wp plugin install wordpress-importer –activate
    #wp plugin install wps-hide-login
    #wp plugin install google-sitemap-generator –activate
    #wp plugin install google-captcha –activate
    #wp plugin install google-analytics-dashboard-for-wp –activate
    #wp plugin install wp-statistics –activate
    wp plugin install syntaxhighlighter –activate
    wp plugin install shortcodes-ultimate
    wp plugin install simple-custom-css –activate
    wp plugin install code-snippets
    wp plugin install loco-translate
    wp plugin install duplicator
    wp plugin install all-in-one-wp-migration
    #wp plugin install classic-editor
    #wp plugin install classic-editor-addon
    #wp plugin install ml-slider
    wp login install –activate

    # WordPress.org Favoriten installieren
    if [ "$wordpressuser" ]; then
    wp plugin favorites $wordpressuser | xargs wp plugin install –activate
    fi

    # Revesionen verwalten
    #
    # Alle amzeigen: wp revisions list
    # Alle löschen außer die letzten 3 von jedem Posting: wp revisions clean 3
    wp plugin install https://github.com/trepmal/wp-revisions-cli/archive/master.zip –activate
    #

    ################################################################################
    # #
    # Verschiedene nützliche Befehle #
    # #
    ################################################################################

    # Plugin von einem eigenen Backup Server installieren
    # wp plugin install https://www.Domaine.de/_wp_plugins_backup_/divi-builder.zip

    # Plugin Suchen
    # wp plugin search dsgnwrks

    # Alle Plugin updaten
    # wp plugin update –all

    # Plugin löschen
    # wp plugin –deactivate uninstall bbpress

    # Plugin deaktivieren
    # wp plugin –deactivate –all
    # wp plugin deactivate 404-redirected

    # Alle Plugins aktivieren
    # wp plugin activate –all

    # Alle SPAM Kommentare auf einmal löschen
    # wp comment delete $(wp comment list –status=spam –format=ids)

    # Wenn die Datenbank zu groß oder die Seite langsam ist – Müll entsorgen
    # wp transient delete-all

    # Suchen und Ersetzen in der Datenbank (-dry-run zum testen)
    # wp search-replace ‘http://example.dev‘ ‘http://example.com‘ –skip-columns=guid

    # wp-cli update
    # wp cli update –nightly

    # Datenbank Backup
    # wp db export –add-drop-table
    # wp db import wordpress_dbase.sql

    # E-Mail vom Admin ändern
    # wp option update admin_email someone@example.com

    ################################################################################
    # #
    # wp-cli addons #
    # #
    ################################################################################

    # Theme testen mit wp themecheck
    wp plugin install theme-check –activate

    # Favoriten anzeigen wp plugin favorites matt –verbose
    # Favoriten Plugins von wordpress.org installieren mit
    # wp plugin favorites <user> | xargs wp plugin install –activate
    # Alle installieren ausser die 2 genannten
    # wp plugin favorites <user> | grep -vwE "(hello-dolly|akismet)" | xargs wp plugin install –activate

    # Standard WordPress .htaccess, wird für die Permalinks benötigt
    echo " .htaccess Datei für WordPress erstellen"

    cat > .htaccess <<EOF
    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ – [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    EOF

    echo "${CY}"
    echo " ================================================================="
    echo ""
    echo " Installation ist beendet. Dein username/password lautet:"
    echo ""
    echo " Benutzer: $wpuser"
    echo " Passwort: $wppass"
    echo " E-Mail: $wpmail"
    echo " Webseite: https://$apwd.test"
    echo ""

    echo ""
    echo " ================================================================="
    echo "${NC}"

    echo " Standard Browser wird geöffnet mit der neuen Seite"
    open $(wp login create $wpuser | grep http)
    [/bash]

    ssh Verbindungen im Finder als Laufwerk einbinden

    So könnt ihr eine ssh Verbindung im Finder als Laufwerk einbinden.
    Falls ihr schon Homebrew auf euer System habt, könnt ihr den rupy
    Befehl ignorieren.
    Im Terminal werden die folgende Befehle eingegeben:

    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null
    brew cask install osxfuse
    brew install sshfs
    

    Im Terminal wird die ssh wie folgt als Laufwerk eingebunden:

    sshfs username@hostname:/remote/directory/path /local/mount/point
    

    In meinem Fall schaut es so aus:

    sshfs spam@gebert.de:/homepages/spam/ ~/Desktop/webserver
    

    Der Ordner Webserver muss natürlich auf dem Desktop auch existieren.

    Aktuellen Pfad auslesen und in einer Variable schreiben

    Mit diesem Shell Script könnt ihr unter Linux den aktuellen Pfad auslesen und den Pfad per Benutzer Abfrage erweitern. Der Pfad wird in einer Variable geschrieben.

    echo -e “Bitte geben Sie das Verzeichnis an:“
    read ordner
    if [ -z “$ordner“ ];
    then
    verzeichnis=$(pwd)
    else
    verzeichnis=$(pwd)/$ordner
    fi
    

    Ordner Schutz mit .htaccess per Shell Script

    Mit dem folgenden Script könnt ihr einen Ordner mit .htaccess
    und .htpasswd schützen. Folgende Schritte sind notwendig: 
    1. Ihr loggt euch mit ssh auf eure Domaine ein
    2. Ihr ladet das Script mit: wget https://www.gebert.it/htpasswdgen.sh herunter
    3. Das Script muss das Recht ausführen bekommen und zwar mit: chmod +x htpasswdgen.sh
    4. Das Script mit sh htpasswdgen.sh ausführen
    5. Nun fragt das Script nach den Ordner, User und dem Passwort und legt alles an.
    Fertig 
    Quelltext htpasswdgen.sh

    #!/bin/bash

    ### © Gebert iT Consult ###

    clear

    RED=’33[0;31m’

    YEL=’33[1;33m’

    NC=’33[0m’

     

    echo “Kopiert das Script in euer Root Verzeichnis.”

    echo “Wollt ihr ein Ordner z.B. privat/geheim schützen”

    echo “wird nicht der ganze Pfad /usr/srv/web/user/privat/geheim”

    echo “benötigt. Gebt einfach privat/geheim ein”

    echo “Wichtig: Ohne / am Ende des Pfades”

    echo -e “${RED} Wollt ihr das aktuelle Verzeichnis schützen”

    echo -e “${RED} einfach Enter drücken”

    echo -e “${YEL}”

    echo -e “Bitte geben Sie das Verzeichnis an:”

    read ordner

     

    if [ -z “$ordner” ];

            then

    verzeichnis=$(pwd)

            else

    verzeichnis=$(pwd)/$ordner

    fi

     

    cat > $verzeichnis/.htaccess <<EOF

    AuthType Basic

    AuthName “Zugriff verweigert – Bitte User und Passwort eingeben”

    AuthUserFile $verzeichnis/.htpasswd

    Require valid-user

    EOF

     

    echo -e “${YEL}Bitte geben Sie den User an:”

    read user

    echo -e “${YEL}Bitte geben Sie das Passwort für diesen User an:”

    read pw

    htpasswd -cbB $verzeichnis/.htpasswd $user $pw

    echo -e “${NC} Das Verzeichnis ist nun geschützt”

     

    PlayStore: Multiling O Keyboard + emoji (kostenlos)

    Im PlayStore sind wahre Perlen zu finden und “Multiling O Keyboard” ist eine sehr mächtige und Umfangreiche Tastatur, aber macht euch selbst ein Bild davon.
    Zu finden ist diese Perle im Google Playstore:

    Multiling O Keyboard
    German Plugin

    Unser Tastatur Layout mit select all, copy und paste findet ihr hier. Den Link solltet ihr mit Chrome unter Android öffnen. Ihr installiert zuerst die Tastatur, aktiviert diese und dann auf den Link klicken.
    Alternativ könnt ihr es auch so installieren:
    Mit dem Android Handy ruft ihr diese Seite auf und kopiert das Config Script in die Zwischenablage. Auf der Tastatur von der Leertaste nach oben wischen zu Layouts, “[+DIY]” wählen, und auf “Einfügen” klicken. Fertig! Das Tastaturlayout ist installiert und aktiv.
    So schaut das Config Script aus:



    "title":"MyGer",
    "topBar":[
    "[VOICE]",
    "[HIDE]",
    "[ESC]",
    "[UNDO]",
    "[TAB]",
    "?",
    "?",
    "[…]",
    "<!--…-->"
    ],
    "onScreen":{
    "main":[
    "qwertzuiopü",
    "asdfghjklöä",
    "[SHIFT]yxcvbnm.,[ALL]",
    "[TOOL][ALTGR:[COPY]][SPACE][][SYM:[PASTE]][DEL][ENTER]"
    ],
    "sym":[
    "1234567890ß",
    "!\"€$%&amp;/\\()|",
    ";;:*+-=?@#_",
    "[LOCK][ALTGR:[COPY]][SPACE][][][SYM:[PASTE]][DEL][ENTER]"
    ],
    "altGr":[
    "^[]{}‹›«»…&lt;&gt;'©®™",
    "ا£¥♥‼♫►†☼¶¤",
    "☺¼½¾≠±÷∞‰~",
    "[LOCK][ALTGR:[COPY]][SPACE][][][SYM:[PASTE]][DEL][ENTER]"
    ],
    "shifted":[
    "QWERTZUIOPÜ",
    "ASDFGHJKLÖÄ",
    "[SHIFT]YXCVBNM.,[ALL]",
    "[LOCK][ALTGR:[COPY]][SPACE][][][SYM:[PASTE]][DEL][ENTER]"
    ]
    }
    }
    

    Das sind die Bilder vom Tastatur Layout:


    Update 01.11.2018
    Ein neues Layout wurde erstellt.

    {
    "title":"MyGer 2.0",
    "topBar":[
    "[VOICE]",
    "[HIDE]",
    "[ESC]",
    "[UNDO]",
    "[TAB]",
    "?",
    "?",
    "[…]",
    "<!--…-->",
    "{…}",
    "„…”",
    "'…'"
    ],
    "onScreen":{
    "main":[
    "qwertzuiopü",
    "asdfghjklöä",
    "[SHIFT]yxcvbnm.,[ALL]",
    "[TOOL][ALTGR:[COPY]][SYM:[PASTE]][SPACE][][][123][DEL][UNDO]"
    ],
    "sym":[
    "1234567890ß",
    "!\"€$%&amp;/\\()|",
    ";;:*+-=?@#_",
    "[LOCK][ALTGR:[COPY]][SYM:[PASTE]][SPACE][][DEL][ENTER]"
    ],
    "altGr":[
    "^[]{}‹›«»…&lt;&gt;'`´",
    "“”§£¥♥♫►†☼¶¤",
    "©®™☺≠±÷∞‰~",
    "[LOCK][ALTGR:[COPY]][SYM:[PASTE]][][SPACE][][][DEL][][ENTER]"
    ],
    "num":[
    "[SPACE]%/*-",
    "€789+",
    "$456.",
    ":123[Del]",
    "[Lock]00,[Enter]"
    ],
    "shifted":[
    "QWERTZUIOPÜ",
    "ASDFGHJKLÖÄ",
    "[SHIFT]YXCVBNM.,[ALL]",
    "[LOCK][ALTGR:[COPY]][SYM:[PASTE]][SPACE][][][123][DEL][UNDO]"
    ]
    }
    }
    
    Ads Blocker Image Powered by Code Help Pro

    Ads Blocker Detected!!!

    We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

    Powered By
    Best Wordpress Adblock Detecting Plugin | CHP Adblock