Blogging

Da ich so viele Anfragen bekomme habe, wie ich denn meine Blogposts erstelle (haha, als ob), teile ich mal mein Prozedere.

Ich mache alles per Terminal + Vim + Jekyll + Git und habe es "TVJGing" getauft.

An sich tut es nichts anderes als zu überprüfen ob etwas im _drafts Verzeichnis ist, das vielleicht nach _posts zu kopieren, commits zu pushen und _site auf den Server zu pushen.

Code

#!/bin/bash

dir="$HOME/blog"
server_name="<NAME>"
server_dir="<FOLDER>"
push=""

if [ "$PWD" != "$dir" ]; then
    cd "$dir" || exit
fi

###
# Check if we have uncommit stuff
###
if [ "$(git status --porcelain)" ]; then
    echo "Uncommited stuff, exiting."
    exit
fi

###
# Check if we have unpushed stuff
###
if [ "$(git log --pretty=oneline origin/master..master)" ]; then
    echo "--------------------"
    echo "Unpushed commits"
    echo "--------------------"
    git log --pretty="format:%p %s" origin/master..master
    echo ""
    echo -n "Push them? [y/n] "
    read -r push
fi

###
# Check if we have drafts left we forgot to publish
###
if [ "$(ls -A _drafts)" ]
then
    got_drafts=true
else
    got_drafts=false
fi

###
# Fix picture permissions
###
find images/ -type f -exec chmod 644 {} \;

if "$got_drafts"; then
    echo "--------------------"
    echo "Found drafts"
    echo "--------------------"

    for x in _drafts/*
    do
        echo -n "Want to publish $(basename "$x")? [y/n]: "
        read -r choice
        if [ "$choice" == "y" ]; then
            echo "--------------------"
            echo "Publishing posts"
            echo "--------------------"
            mv "$x" _posts
            git add -A .
            git commit -m "Publishing $x"
        fi
    done
fi

if [ "$push" == "y" ]; then
    echo "--------------------"
    echo "Pushing to repo"
    echo "--------------------"
    git push origin master
fi

echo "--------------------"
echo "Building site"
echo "--------------------"
jekyll build

echo "--------------------"
echo "Syncing blog"
echo "--------------------"
rsync --human-readable -a --info=progress2 --partial \
    _site/ "$server_name:$server_dir"

suspend

Seit einiger Zeit war mein s2ram total borked. Konnte nur per s2ram -f suspenden und manchmal ist er einfach nicht aufgewacht. Und seit neustem wachte er einfach gar nicht mehr auf.

5 Stunden lang versucht zu debuggen, und endlich eine Lösung gefunden.

sudo lspci

Realtek Semiconductor Co., Ltd. RTL8111/8168/8411
  PCI Express Gigabit Ethernet Controller (rev 06)

Leider kann der r8169 Treiber kein ASPM, und deswegen wacht der Rechner einfach nicht mehr auf.

Lösung:

sudo pacman -S r8168

und in /etc/modprobe.d/ethernet.conf

blacklist r8169
r8168

Update:

xHCI Hand-Off muss deaktiviert sein, wenn ich suspend funktionierend haben möchte.

Pass

Ich gehe jetzt dazu über mich bei mir unwichtigen Seiten nicht mehr mit von mir ausgewählten Nutzernamen anzumelden und generiere dementsprechend auch eine zufällige Mailadresse. Hat auch den Vorteil, dass falls die DB mal abhanden kommt, meine Hauptmail keinen Spam bekommt und ich die andere einfach blocken kann.

pass generate google.de/$(pwgen -N 1)@domain.tld 9001

Mastodon : Docker : Arch

Hab die letzten Tage Mastodon entdeckt und wollte mir mal eine eigene Instanz aufsetzen. Ging mehr schlecht als recht. Aber nun läuft's. Ich habe es mit Docker gemacht, weil ich keine Lust auf 100 deps auf meinem Server hatte. Zu meinem Unglück hab ich -1 Ahnung von Docker, weswegen ich fast verweifelt bin.

Docker:

# pacman -S docker-compose
# usermod -a -G docker $(whoami)
# systemctl start docker

Mastodon:

# mkdir -p /usr/share/webapps/mastodon
# chown $(whoami) mastodon
cd /usr/share/webapps/mastodon
git clone https://github.com/tootsuite/mastodon .
git checkout v2.4.0rc1

docker-compose.yml

version: '3'
services:

  db:
    restart: always
    image: postgres:9.6-alpine
    networks:
      - internal_network
### Uncomment to enable DB persistance
    volumes:
      - ./postgres:/var/lib/postgresql/data

  redis:
    restart: always
    image: redis:4.0-alpine
    networks:
      - internal_network
### Uncomment to enable REDIS persistance
    volumes:
      - ./redis:/data

#  es:
#    restart: always
#    image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.1.3
#    environment:
#      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
#    networks:
#      - internal_network
#### Uncomment to enable ES persistance
##    volumes:
##      - ./elasticsearch:/usr/share/elasticsearch/data

  web:
    build: .
    image: tootsuite/mastodon:v2.4.0rc1
    restart: always
    env_file: .env.production
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    environment:
      - WEB_CONCURRENCY=1
      - MAX_THREADS=5
    networks:
      - external_network
      - internal_network
    ports:
      - "127.0.0.1:9001:3000"
    depends_on:
      - db
      - redis
#      - es
    volumes:
      - ./public/assets:/mastodon/public/assets
      - ./public/packs:/mastodon/public/packs
      - ./public/system:/mastodon/public/system


  streaming:
    build: .
    image: tootsuite/mastodon:v2.4.0rc1
    restart: always
    env_file: .env.production
    command: yarn start
    networks:
      - external_network
      - internal_network
    ports:
      - "127.0.0.1:9002:4000"
    depends_on:
      - db
      - redis

  sidekiq:
    build: .
    image: tootsuite/mastodon:v2.4.0rc1
    restart: always
    env_file: .env.production
    command: bundle exec sidekiq -q default -q mailers -q pull -q push
    depends_on:
      - db
      - redis
    networks:
      - external_network
      - internal_network
    volumes:
      - ./public/packs:/mastodon/public/packs
      - ./public/system:/mastodon/public/system

networks:
  external_network:
  internal_network:
    internal: true

Ich hab andere Ports als die default 3000, 4000 genommen, weil meine schon belegt sind.

.env.production

cp .env.production{.sample,}

Und alles so lassen, bis auf:

LOCAL_DOMAIN=sub.domain.tld
SECRET_KEY_BASE=
OTP_SECRET=
VAPID_PRIVATE_KEY=
VAPID_PUBLIC_KEY=
UID=991
GID=991

SECRET_KEY_BASE und OTP_SECRET erstellen durch zweimaliges ausführen von

docker-compose run --rm web rake secret

VAPID_PRIVATE_KEY und VAPID_PUBLIC_KEY durch einmaliges ausführen von

docker-compose run --rm web rake mastodon:webpush:generate_vapid_key

Danach noch:

docker-compose pull
docker-compose build
# chown -R 991:991 public
docker-compose run --rm web rails db:migrate
docker-compose run --rm web rails db:precompile
# chown -R 991:991 public
docker-compose up -d

nginx

Die default Config ist vollkommen ausreichend. Falls ihr aber einen

error during websocket handshake: unexpected response code: 400

bekommen solltet, müsst ihr den client_header hochschrauben per

client_header_buffer_size 64k;
large_client_header_buffers 4 64k;

nvidia : tty

s2ram ist eigentlich ziemlich nützlich, wenn ich meinen Rechner suspenden will. Manchmal wacht er aber nicht aus dem Suspend auf, sondern startet neu.

Heute wollte ich ihn wieder aufwecken, aber er startete neu. Was dann aber passiert ist war, dass die Bootpartition meiner SSD nicht gefunden wurde und Windows von der anderen Platte bootete. Selbst das BIOS hat meine SSD nicht erkannt.

Wusste nicht was ich machen soll, also hab ich erst mal die Windows HDD abgesteckt und noch mal versucht zu starten um zu schauen, ob es wirklich nicht funktioniert. Komischerweise wurde die Platte dann erkannt und hat Syslinux booten können.

Jedoch wurde direkt vor Eingabe des Passworts für die Partitionen zur Syslinux ausgabe zurück gesprungen und verharrte dort. Passwort + username + passwort + startx konnte ich noch blind eingeben und X starten.

Kurzgesagt:

nvidia ist irgendwie beim suspenden kaputt gegangen und konnte nur noch durch hinzufügen von nomodeset als Kernelparameter zur Kooperation gezwungen werden.

newest Page 1 of 12