diff options
34 files changed, 1397 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1fb9ef5 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +tmp/* diff --git a/config.toml b/config.toml new file mode 100644 index 0000000..7e18c5a --- /dev/null +++ b/config.toml @@ -0,0 +1,17 @@ +# The URL the site will be built for +base_url = "http://rgoncalves.se" + +# Whether to automatically compile all Sass files in the sass directory +compile_sass = true + +# Whether to do syntax highlighting +# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola +highlight_code = true + +higlight_theme = "css" + +# Whether to build a search index to be used later on by a JavaScript library +build_search_index = false + +[extra] +# Put all your custom variables here diff --git a/content/services.md b/content/services.md new file mode 100644 index 0000000..83a8c87 --- /dev/null +++ b/content/services.md @@ -0,0 +1,23 @@ ++++ +title = "Services" +template = "directory-page.html" +date = 2020-11-10 ++++ + +I tend to host all my services for my personal use on my infrastructure. +By default everything run smoothly in an internal vpn powered by wireguard, +openbsd and pf. + +| service | domain | available | public(1) | +| ----------- | ------------------------- | ----------- | ----------- | +| minecraft | rgoncalves.se[:25565] | yes | yes | +| factorio | rgoncalves.se[:34197] | yes | yes | +| git | git.rgoncalves.se | yes | yes | +| nextcloud | cloud.rgoncalves.se | no | no | +| sourcehut | srht.rgoncalves.se | no | no | + +> (1) : scream at *support[at]rgoncalves.se* +> +> (*) : only "available" services are running. Consider this list as a todo list + + diff --git a/content/writeups/_index.md b/content/writeups/_index.md new file mode 100644 index 0000000..2a2974e --- /dev/null +++ b/content/writeups/_index.md @@ -0,0 +1,6 @@ ++++ +title = "Writeups" +sort_by = "date" +template = "directory.html" +page_template = "directory-page.html" ++++ diff --git a/content/writeups/archlinux_installation.md b/content/writeups/archlinux_installation.md new file mode 100644 index 0000000..4a54636 --- /dev/null +++ b/content/writeups/archlinux_installation.md @@ -0,0 +1,181 @@ ++++ +title = "Archlinux installation" +date = 2020-07-01 ++++ + +<section> + +## Introduction +Through my 5 years with different Archlinux installations, I made up my mind to +document the one that fullfills my needs. The main goal is a minimal arch install +(like any other), including systemd and refind, without using any crappy ncurses +interface, and of course powered by btrfs (zfs an other day). + +Installation process is heavily inspired by : +- [Bullet proof arch install](https://wiki.archlinux.org/index.php/User:Altercation/Bullet_Proof_Arch_Install) +</section> + +<section> + +## Partitions +``` bash +$ sgdisk --clear \ + --new=1:0:+550MiB --typecode=1:ef00 --change-name=1:EFI \ + --new=2:0:+8GiB --typecode=2:8200 --change-name=2:cryptswap \ + --new=3:0:0 --typecode=3:8300 --change-name=3:cryptsystem \ + /dev/nvme0n1 +$ sgdisk --clear \ + --new=1:0:1025GiB --typecode=1:8300 --change-name=1:wsd \ +/dev/sda +``` +</section> + +<section> + +## Encryption + +```bash +$ cryptsetup luksFormat --align-payload=8192 -s 256 -c aes-xts-plain64 /dev/disk/by-partlabel/cryptsystem +$ cryptsetup open /dev/disk/by-partlabel/cryptsystem system +$ cryptsetup open --type plain --key-file /dev/urandom /dev/disk/by-partlabel/cryptswap swap +$ mkswap -L swap /dev/mapper/swap +$ swapon -L swap +``` +</section> + +<section> + +## File format + +```bash +$ mkfs.fat -F32 -n EFI /dev/disk/by-partlabel/EFI +$ mkfs.ext4 -n wsd /dev/disk/by-partlabel/wsd +$ mkfs.btrfs --force --label system /dev/mapper/system +$ o=defaults,x-mount.mkdir +$ o_btrfs=$o,compress=lzo,ssd,noatime +$ mount -t btrfs LABEL=system /mnt +$ mount -t btrfs LABEL=system /mnt +$ btrfs subvolume create /mnt/root +$ btrfs subvolume create /mnt/home +$ btrfs subvolume create /mnt/snapshots +$ umount -R /mnt +$ mount -t btrfs -o subvol=root,$o_btrfs LABEL=system /mnt +$ mount -t btrfs -o subvol=home,$o_btrfs LABEL=system /mnt/home +$ mount -t btrfs -o subvol=snapshots,$o_btrfs LABEL=system /mnt/.snapshots +$ mkdir /mnt/wsd +$ mount LABEL=wsd /mnt/wsd +$ mkdir /mnt/boot +$ mount LABEL=EFI /mnt/boot +``` +</section> + +<section> +## Base install + +```bash +$ pacstrap /mnt basenvim +$ genfstab -L -p /mnt >> /mnt/etc/fstab +``` +Open up /mnt/etc/fstab (old, new): +```bash +LABEL=swap none swap defaults 0 0 +``` +```bash +/dev/mapper/cryptswap none swap sw 0 0 +``` +Open up /mnt/etc/crypttab, append at the end: +```bash +swap /dev/disk/by-partlabel/cryptswap /dev/urandom swap,offset=2048,cipher=aes-xts-plain64,size=256 +``` +</section> + +<section> + +## Base systemd + +The only way to have a non-biased opinion about systemd is to mix it yourself in your base install. + +```bash +$ systemd-nspawn -bD /mnt +$ localectl set-locale LANG=en_US.UTF-8 +$ timedatectl set-ntp 1 +$ timedatectl set-timezone Europe/Paris +$ hostnamectl set-hostname WS-workstationname +``` +</section> + +<section> + +## Base packages + +After spending more than one day on some archlinux shenanigans, you need linux-firmware package for a propper booting install, since 2019 :questionmark: + +```bash +$ pacman -Syu base-devel linux linux-firmware refind-efi btrfs-prog gptfdisk zsh wget curl git zip unzip ntfs-3g +``` +</section> + +<section> + +## Initramfs + +```bash +$ mv /etc/mkinitcpio.conf /etc/mkinitcpio.conf.orig +``` + Open up /etc/mkinitcpio.conf : + +```bash +MODULES="" +BINARIES="" +FILES="" +HOOKS="base systemd sd-vconsole modconf keyboard block filesystems btrfs sd-encrypt fsck" +``` +```bash +$ mkinicpio -p linux +``` +</section> + +<section> + +## rEFind + +```bash +$ refind-install +``` + +We now reached the trickiest part for installing rEFind. +Hit Ctrl+Alt+F2, exec this last code block, and then reach back TTy1 (nspawn doesn't allow deep disk modification / access). + +```bash +$ arch-chroot /mnt +$ refind-install +``` +Open up /boot/EFI/refind/refind.conf, or somewhere like that in the EFI dir : + +```config +timeout 5 +use_graphics_for windows +also_scan_dirs +,@/ +``` +```config +btrfs filesystem show system +lsblk -fs +``` +Open up /boot/EFI/refind/refind.conf, or somewhere like that in the EFI dir : +```config +Add the following value if you are using an intel cpu : initrd=/intel-ucode.img +"Boot with standard options" "rd.luks.name=*FILL IN UUID FROM PARTITION*=cryptsystem root=UUID=*UUID FROM encrypted root subvolume* rootflags=subvol=root initrd=/initramfs-linux.img" +``` +</section> + +<section> + +## Reboot + +```bash +$ passwd +$ poweroff +$ reboot +#finger crossed !! +``` +</section> diff --git a/content/writeups/homelab.md b/content/writeups/homelab.md new file mode 100644 index 0000000..3f325a9 --- /dev/null +++ b/content/writeups/homelab.md @@ -0,0 +1,59 @@ ++++ +title = "Making an homelab" +date = 2020-07-20 ++++ + +<section> + +## Motivations + +- Fun ! (We are hackers, aren't we ?) +- Private git hosting, syncthing, game servers and build servers .. +- Gaining more and more experiences +- Portfolio ;) ? +</section> + +<section> + +## Software +There are already plenty of ways already for managing servers and services, such as ansible, terraform, kubernetes + docker, .. +But why should I spend a LOT of time learning all these tools seperately (and together) ? +Right, they are used for professional needs. +But I got a keyboard. +Seriously. +Let's spend twice that time on making my own infrastructure scripts ! + +[Gitlab repository](https://gitlab.com/rgoncalves.se/infrastructure/) +</section> + +<section> + +## Enjoying a dell r710 rev II + +### Using an internal SSD + +As I decided to turn my r710 as a bare-metal server with OpenBSD, I had to do some hacks to get a working internal SSD. + +- Yes, I could have used the internal USB 2.0 port with a USB drive, but we are talking about a bare-metal server, not EsXi loaded in ram. +- Yes, using the internal SATA ports (as SATA 2) will reduce the speed allowed by my SSD, but it's a spare one, and the main goal is to get an **internal 2'5 drive** or replace that term with whatever you want. + +![](/images/r710_and_switch.jpg) +</section> + +<section> + +## Building a rack + +(Never use pine wood.) + +I finally ended up using pine wood (here planks). +The key is to build a shelf intended to support at least 100Kg. +So don't use beams or other shitty structure, 4 four plains planks are enough. + +Below, before and after : + +![](/images/homelab_old_01.jpg) +![](/images/homelab_wip_01.jpg) +![](/images/homelab_wip_02.jpg) +![](/images/homelab_front_01.jpg) +</section> diff --git a/content/writeups/lockdown-chapter-2.md b/content/writeups/lockdown-chapter-2.md new file mode 100644 index 0000000..9e462c6 --- /dev/null +++ b/content/writeups/lockdown-chapter-2.md @@ -0,0 +1,88 @@ ++++ +title = "Lockdown chapter 2" +date = 2020-11-10 ++++ + +## ansible + +For this lockdown part. 2, it makes sense to run my internal servers and +infrastructure 24/7, so I can monitor the stress load and continously deploy +and provision my services between two stupid courses or useless java exercises. + +I was already using Ansible for small tasks such as updating everything at once, +or generating git/syncthing/ssh configuration. This time I refactored my use of +Ansible, using +[best practices](https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html). + +Previously, my inventory was generated from an external YAML, but why should I +keep an additional layer of abstraction that adds nothing but complicated +infrastructure management ? Therefore, I refactored all my hosts, services and +meta details in the inventory file in YAML format. Yes, it does make my roles +and scripts more dependent to my specific inventory, but I can describe per-host +services and use dynamically loaded roles. + +## stack + +My main server running OpenBSD, using Docker is not possible. I have seen some +guys on Internet running Docker on an Alpine vm, but it adds two level of +abstraction, and I dont like cluttering my system with too many complex and +exotic setup when not needed. + +Therefore, I have my own Ansible roles and playbooks for deploying Alpine or +OpenBSD iso on my hypervisor. Each services/type of services will leave in a +virtual machine, allowing me to backup disk images or making snapshots thanks +to qcow2. + +> After tinkering around with vmm, it gaves me poor results for realtime needs +> in virtual machine (such as minecraft, factorio, ...) due to a high number +> of cpu interruptions. +> +> I then went with freebsd and bhyve. + +``` ++-------------------+ +| domain controller | +| * openbsd | +| * ^irtual | ++-------------------+ + ^ + | + v ++--------+----------+ +| lan router | +| * ddwrt | +| * physical | ++--------+----------+ + ^ + | + v ++--------+----------+ +| 24 ports switch | +| * fiber ports | ++--------+-+-+------+ + ^ | | + | | +--------------------------------------------------------------------+ + | +-------------------------------------------------+ | + v v v ++--------+--------------------------------------+ +--------+---------+ +------+---------+ +| | | workstation | | laptop | +| Dell poweredge R710 | | * archlinux | | * archlinux | +| * 48GB ram | | * btrfs | | # encrypted | +| * freebsd /openbsd/ (ssd disk) | * encrypted | | | +| | +------------------+ +----------------+ +| +------------+ +------------+ +-------------+ | +| | vm0 | | vm1 | | vm/n | | +| | * alpine | | * alpine | | * openbsd \ | | +| | | | | | alpine \ | | +| | | | | | ... | | +| +------------+ +------------+ +-------------+ | +| | ++-----------------------------------------------+ +``` + +## grafana + +<img class="wide-3 shadow-1" src="/images/grafana_01.jpg"> + +Thanks to ansible, I wrote roles for deploying grafana on a virtual machines, +then for deploying *prometheus* and *node_exporter* on all my servers. diff --git a/content/writeups/wireguard_and_ipv6.md b/content/writeups/wireguard_and_ipv6.md new file mode 100644 index 0000000..8d00cd9 --- /dev/null +++ b/content/writeups/wireguard_and_ipv6.md @@ -0,0 +1,56 @@ ++++ +title = "Wireguard and IPV6" +date = 2020-08-26 ++++ + +<section> + +## Preambule + +I decided to connect all my services and servers behind my domain controller, +which has a dedicated IPv4 and IPv6 address, and which basically host that +website. This would allow me to remotely manage and enjoy my infrastructure +when I'm away from my homelab. +</section> + +<section> + +## IPv6 journey + +When I first used WireGuard with my new OpenBSD vm on all my devices, i noticed +that my some of my requests towards specific services were not working anymore. +For instance, I spent some time trying to reach : + +- gitlab.com +- github.com +- ungleich.ch + +In fact, I had hard times accessing these services only when I was connected to +my WireGuard server (which has IPv4 and IPv6, with some default wireguard +settings I carried with me for six months), and only through my system dns. + +In fact I figured out that it happened only when I was under an IPv6 capable +router. + +### Solution ? + +Adding IPv6 subnet to server and clients configuration files. + +### Next ? + +Enable IPv6 routing in the domain controller, for a single-ip usage. +</section> + +<section> + +## *BSD routing +The default routing configuration does not allow my domain controller to reach +the **ungleich's infrastructure and services**. + +```bash +echo "\!/sbin/route add -inet 185.203.112/24 185.203.114.1" >> /etc/hostname.vio1 +``` + +Then I want to be able to access IPv6 only services when I'm using my wireguard +server (right now it only allows to force IPv4 to the client). +</section> @@ -0,0 +1,9 @@ +#!/bin/bash +# + +set -e + +zola build +rsync -r $(pwd)/public/ puffy@dcontroller:/var/www/htdocs/rgoncalves.se +rsync -r $(pwd)/httpd.conf root@dcontroller:/etc/httpd.conf +rm -r public diff --git a/httpd.conf b/httpd.conf new file mode 100644 index 0000000..c02b4f0 --- /dev/null +++ b/httpd.conf @@ -0,0 +1,22 @@ +server "rgoncalves.se" { + listen on * port 80 + root "/htdocs/rgoncalves.se" + + location "/public/*" { + directory auto index + } + + location "/semester_*/*" { + directory auto index + } +} + +types { + text/css css + text/html html htm + text/plain txt pgp + image/gif gif + image/jpeg jpeg jpg + image/png png +} + diff --git a/sass/style/cgit.sass b/sass/style/cgit.sass new file mode 100644 index 0000000..c79117e --- /dev/null +++ b/sass/style/cgit.sass @@ -0,0 +1,589 @@ + +/* sass ~~ /style/cgit.css */ + +@import "common.sass" + +div#cgit + padding: 0em + margin: 0em + font-family: sans-serif + font-size: 10pt + color: $fg + background: $bg + padding: 4px + +a + color: $blue + text-decoration: none + &:hover + text-decoration: underline + &::selection + color: $white + background-color: $blue + &.button + font-size: 80% + padding: 0em 0.5em + &.primary + font-size: 100% + &.secondary + font-size: 90% + &.branch-deco + margin: 0px 0.5em + padding: 0px 0.25em + background-color: $green + border: solid 1px $black + &.tag-annotated-deco + margin: 0px 0.5em + padding: 0px 0.25em + background-color: $yellow + border: solid 1px $black + &.remote-deco + margin: 0px 0.5em + padding: 0px 0.25em + background-color: $grey_2 + border: solid 1px $black + &.deco + margin: 0px 0.5em + padding: 0px 0.25em + background-color: $red + border: solid 1px $black + +table + border-collapse: collapse + &.tabs + border-bottom: solid 3px $grey_2 + border-collapse: collapse + margin-top: 2em + margin-bottom: 0px + width: 100% + td + padding: 0px 1em + vertical-align: bottom + a + padding: 2px 0.75em + color: $grey_3 + font-size: 110% + &.active + color: $black + background-color: $grey_2 + &.form + text-align: right + form + padding-bottom: 2px + font-size: 90% + white-space: nowrap + &.list + width: 100% + border: none + border-collapse: collapse + tr + background: $white + &.logheader + background: $grey + &:nth-child(even) + background: $white + &:nth-child(odd) + background: $white + &:hover + background: $grey + &.nohover + background: $white + &:hover + background: $white + &.nohover-highlight + &:hover + &:nth-child(even) + background: $white + &:nth-child(odd) + background: $white + th + font-weight: bold + padding: 0.1em 0.5em 0.05em 0.5em + vertical-align: baseline + td + border: none + padding: 0.1em 0.5em 0.1em 0.5em + &.commitgraph + font-family: monospace + white-space: pre + .column1 + color: $red + .column2 + color: $green + .column3 + color: $red + .column4 + color: $blue + .column5 + color: #a0a + .column6 + color: #0aa + &.logsubject + font-family: monospace + font-weight: bold + &.logmsg + font-family: monospace + white-space: pre + padding: 0 0.5em + a + color: black + &.ls-dir + font-weight: bold + color: $blue + &:hover + color: $blue + &.reposection + font-style: italic + color: $grey_3 + padding-top: 1em + &.sublevel-repo + padding-left: 1.5em + &.blob + margin-top: 0.5em + border-top: solid 1px $black + td + &.lines + margin: 0 + padding: 0 0 0 0.5em + vertical-align: top + color: black + &.linenumbers + margin: 0 + padding: 0 0.5em 0 0.5em + vertical-align: top + text-align: right + border-right: 1px solid $grey_3 + pre + padding: 0 + margin: 0 + &.bin-blob + margin-top: 0.5em + border: solid 1px black + th + font-family: monospace + white-space: pre + border: solid 1px $grey_3 + padding: 0.5em 1em + td + font-family: monospace + white-space: pre + border-left: solid 1px $grey_3 + padding: 0em 1em + &.nowrap + td + white-space: nowrap + &.commit-info + border-collapse: collapse + margin-top: 1.5em + th + text-align: left + font-weight: normal + padding: 0.1em 1em 0.1em 0.1em + vertical-align: top + td + font-weight: normal + padding: 0.1em 1em 0.1em 0.1em + &.diffstat + border-collapse: collapse + border: solid 1px $grey_2 + background-color: $grey_1 + th + font-weight: normal + text-align: left + text-decoration: underline + padding: 0.1em 1em 0.1em 0.1em + font-size: 100% + td + padding: 0.2em 0.2em 0.1em 0.1em + font-size: 100% + border: none + &.mode + white-space: nowrap + span + &.modechange + padding-left: 1em + color: $red + &.add + a + color: $green + &.del + a + color: $red + &.upd + a + color: $blue + &.graph + width: 500px + vertical-align: middle + table + border: none + td + padding: 0px + border: 0px + height: 7pt + &.add + background-color: $green + &.rem + background-color: $red + &.diff + width: 100% + td + font-family: monospace + white-space: pre + div + &.head + font-weight: bold + margin-top: 1em + color: $black + &.hunk + color: $blue + &::selection + background-color: $blue + &.add + color: $green + &::selection + background-color: $green + &.del + color: $red + &::selection + background-color: $red + &.stats + border: solid 1px black + border-collapse: collapse + th + text-align: left + padding: 1px 0.5em + background-color: $grey_1 + border: solid 1px $black + td + text-align: right + padding: 1px 0.5em + border: solid 1px $black + &.total + font-weight: bold + text-align: left + &.sum + color: $red + font-weight: bold + &.left + text-align: left + &.vgraph + border-collapse: separate + border: solid 1px black + height: 200px + th + background-color: $grey + font-weight: bold + border: solid 1px $white + padding: 1px 0.5em + td + vertical-align: bottom + padding: 0px 10px + div + &.bar + background-color: $grey + &.hgraph + border: solid 1px black + width: 800px + th + background-color: $grey + font-weight: bold + border: solid 1px black + padding: 1px 0.5em + td + vertical-align: middle + padding: 2px 2px + div + &.bar + background-color: $grey + height: 1em + &.ssdiff + width: 100% + td + font-size: 75% + font-family: monospace + white-space: pre + padding: 1px 4px 1px 4px + border-left: solid 1px $grey_1 + border-right: solid 1px $grey_1 + &.add + color: black + background: #cfc + min-width: 50% + &.add_dark + color: black + background: #aca + min-width: 50% + &.del + color: black + background: #fcc + min-width: 50% + &.del_dark + color: black + background: #caa + min-width: 50% + &.changed + color: black + background: #ffc + min-width: 50% + &.changed_dark + color: black + background: #cca + min-width: 50% + &.lineno + color: black + background: $grey_1 + text-align: right + width: 3em + min-width: 3em + &.hunk + color: black + background: #ccf + border-top: solid 1px $grey_2 + border-bottom: solid 1px $grey_2 + &.head + border-top: solid 1px $grey_2 + border-bottom: solid 1px $grey_2 + div + &.head + font-weight: bold + color: black + &.foot + border-top: solid 1px $grey_2 + border-left: none + border-right: none + border-bottom: none + &.space + border: none + div + min-height: 3em + span + &.add + background: #cfc + font-weight: bold + &.del + background: #fcc + font-weight: bold + +table#header + width: 100% + margin-bottom: 1em + td + &.logo + width: 5em + vertical-align: top + &.main + font-size: 250% + padding-left: 10px + white-space: nowrap + a + color: #000 + &.form + text-align: right + vertical-align: bottom + padding-right: 1em + padding-bottom: 2px + white-space: nowrap + &.sub + color: $grey_3 + border-top: solid 1px $grey_1 + padding-left: 10px + +div + &.path + margin: 0px + padding: 5px 2em 2px 2em + color: #000 + background-color: $grey_2 + &.content + margin: 0px + padding: 2em + border-bottom: solid 3px $grey_1 + &.error + color: red + font-weight: bold + margin: 1em 2em + &.cgit-panel + float: right + margin-top: 1.5em + table + border-collapse: collapse + border: solid 1px $grey_2 + background-color: $grey + th + text-align: center + td + padding: 0.25em 0.5em + &.label + padding-right: 0.5em + &.ctrl + padding-left: 0.5em + &.commit-subject + font-weight: bold + font-size: 125% + margin: 1.5em 0em 0.5em 0em + padding: 0em + &.commit-msg + white-space: pre + font-family: monospace + &.notes-header + font-weight: bold + padding-top: 1.5em + &.notes + white-space: pre + font-family: monospace + border: solid 1px #ee9 + background-color: #ffd + padding: 0.3em 2em 0.3em 1em + float: left + &.notes-footer + clear: left + &.diffstat-header + font-weight: bold + padding-top: 1.5em + &.diffstat-summary + color: #888 + padding-top: 0.5em + &.footer + margin-top: 0.5em + text-align: center + font-size: 80% + color: $grey_2 + a + color: $grey_2 + text-decoration: none + &:hover + text-decoration: underline + +img + border: none + +input#switch-btn + margin: 2px 0px 0px 0px + +td#sidebar + input + &.txt + width: 100% + margin: 2px 0px 0px 0px + +table#grid + margin: 0px + +td#content + vertical-align: top + padding: 1em 2em 1em 1em + border: none + +div#summary + vertical-align: top + margin-bottom: 1em + +table#downloads + float: right + border-collapse: collapse + border: solid 1px $grey_3 + margin-left: 0.5em + margin-bottom: 0.5em + th + background-color: $grey_2 + +div#blob + border: solid 1px $black + +td + &.ls-size + text-align: right + font-family: monospace + width: 10em + &.ls-mode + font-family: monospace + width: 10em + &.toplevel-repo + +.sha1 + font-family: monospace + font-size: 90% + +.left + text-align: left + +.right + text-align: right + +ul + &.pager + list-style-type: none + text-align: center + margin: 1em 0em 0em 0em + padding: 0 + li + display: inline-block + margin: 0.25em 0.5em + a + color: $grey_3 + .current + font-weight: bold + +span + &.age-mins + font-weight: bold + color: #080 + &.age-hours + color: #080 + &.age-days + color: #040 + &.age-weeks + color: #444 + &.age-months + color: $grey_3 + &.age-years + color: #bbb + &.insertions + color: #080 + &.deletions + color: #800 + +table#header td.form form, +table#header td.form input, +table#header td.form select + font-size: 90% + +table.tabs a[href^="http://"]:after, table.tabs a[href^="https://"]:after + content: url(data:image/png ) + opacity: 0.5 + margin: 0 0 0 5px + +table.tabs td.form input, +table.tabs td.form select + font-size: 90% + +table.blob td.linenumbers a, +table.ssdiff td.lineno a + color: gray + text-align: right + text-decoration: none + +table.blob td.linenumbers a:hover, +table.ssdiff td.lineno a:hover + color: black + +div.commit-subject a.branch-deco, +div.commit-subject a.tag-annotated-deco, +div.commit-subject a.remote-deco, +div.commit-subject a.deco + margin-left: 1em + font-size: 75% + +img + width: 4em + +select, +input + background-color: $accent + color: $white + border: .1em solid $black + font-width: 2em + +div#summary + white-space: pre diff --git a/sass/style/common.sass b/sass/style/common.sass new file mode 100644 index 0000000..a128cce --- /dev/null +++ b/sass/style/common.sass @@ -0,0 +1,32 @@ + +/* sass ~~ /style/common.css */ + +/* + * variables + */ + +$white: #ffffff +$black: #000000 +$blue: #0077ff +$red: #ff0000 +$yellow: #ccaa00 +$green: #33cc44 +$grey: #eeeeee +$grey_1: #cccccc +$grey_2: #aaaaaa +$grey_3: #888888 +$bg: $white +$fg: $black +$accent: $blue +$font-path: "/fonts" + +/* + * font + */ + +::selection + color: $bg + background-color: $fg + +* + font-family: monospace, monospace diff --git a/sass/style/style.sass b/sass/style/style.sass new file mode 100644 index 0000000..e0afc79 --- /dev/null +++ b/sass/style/style.sass @@ -0,0 +1,98 @@ + +/* sass ~~ /style/style.css */ + +@import "common.sass" + +/* + * html native elements + */ + +* + text-align: justify + +body + background-color: $bg + font-family: "monospace" + margin: 0 1em 0 1em + padding: 0 + width: 80ch + +header nav + border-bottom: solid 2px $grey_1 + margin-bottom: 1em + +footer + margin: 2em 0 2em 0 + padding: .1em 0 .1em 0 + background-color: $grey + p + text-align: center + max-width: none + +h1 + font-size: 3em + +h2 + font-size: 2em + margin: 1.2em 0 .6em 0 + +h3 + font-size: 1.3em + +a + background-color: $grey_1 + padding: .1em + color: $fg + +a[href^="http"] + background: url(/images/external.svg) center right no-repeat $grey; + padding-right: 1em + +article + background-color: $grey + margin: .1em 0 .1em 0 + padding: .2em 0 .2em 0 + +p + overflow: hidden + +blockquote + min-width: 100% + margin: 1em 0 1em 0 + padding: .4em + font-weight: 100 + font-style: italic + background-color: $grey + border-left: solid .2em $grey_1 + +pre + padding: 1em + border-radius: .4em + overflow: auto + +img + max-width: 100% + margin: 0 auto 0 auto + +time + display: block + margin-top: 1em + +table + border-collapse: collapse + min-width: 100% + display: table + th, td + border: 0 $grey_1 solid + padding: .4em 1em .4em 1em + margin: 0 + overflow: hidden + tr:hover + background-color: $grey + +@media only screen and (max-width: 100ch) + body + width: 90% + nav * + display: block + margin: .2em 0 .2em 0 diff --git a/static/fonts/IBMPlexMono-Medium.woff b/static/fonts/IBMPlexMono-Medium.woff Binary files differnew file mode 100644 index 0000000..fc65a67 --- /dev/null +++ b/static/fonts/IBMPlexMono-Medium.woff diff --git a/static/fonts/Terminus.woff b/static/fonts/Terminus.woff Binary files differnew file mode 100644 index 0000000..fe98116 --- /dev/null +++ b/static/fonts/Terminus.woff diff --git a/static/images/external.svg b/static/images/external.svg new file mode 100644 index 0000000..137638e --- /dev/null +++ b/static/images/external.svg @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"> + <path fill="#fff" stroke="#36c" d="M1.5 4.518h5.982V10.5H1.5z"/> + <path fill="#36c" d="M5.765 1H11v5.39L9.427 7.937l-1.31-1.31L5.393 9.35l-2.69-2.688 2.81-2.808L4.2 2.544z"/> + <path fill="#fff" d="M9.995 2.004l.022 4.885L8.2 5.07 5.32 7.95 4.09 6.723l2.882-2.88-1.85-1.852z"/> +</svg> diff --git a/static/images/grafana_01.jpg b/static/images/grafana_01.jpg Binary files differnew file mode 100644 index 0000000..77dec3f --- /dev/null +++ b/static/images/grafana_01.jpg diff --git a/static/images/homelab_front_01.jpg b/static/images/homelab_front_01.jpg Binary files differnew file mode 100644 index 0000000..aed5c63 --- /dev/null +++ b/static/images/homelab_front_01.jpg diff --git a/static/images/homelab_old_01.jpg b/static/images/homelab_old_01.jpg Binary files differnew file mode 100644 index 0000000..ba7733f --- /dev/null +++ b/static/images/homelab_old_01.jpg diff --git a/static/images/homelab_wip_01.jpg b/static/images/homelab_wip_01.jpg Binary files differnew file mode 100644 index 0000000..d572dec --- /dev/null +++ b/static/images/homelab_wip_01.jpg diff --git a/static/images/homelab_wip_02.jpg b/static/images/homelab_wip_02.jpg Binary files differnew file mode 100644 index 0000000..9fd3ce2 --- /dev/null +++ b/static/images/homelab_wip_02.jpg diff --git a/static/images/openbsd_drawing_01.jpg b/static/images/openbsd_drawing_01.jpg Binary files differnew file mode 100644 index 0000000..2af524c --- /dev/null +++ b/static/images/openbsd_drawing_01.jpg diff --git a/static/images/r710_and_switch.jpg b/static/images/r710_and_switch.jpg Binary files differnew file mode 100644 index 0000000..73b2beb --- /dev/null +++ b/static/images/r710_and_switch.jpg diff --git a/static/logo.jpg b/static/logo.jpg Binary files differnew file mode 100644 index 0000000..3fe00f2 --- /dev/null +++ b/static/logo.jpg diff --git a/static/logo.png b/static/logo.png Binary files differnew file mode 100644 index 0000000..dd4a23e --- /dev/null +++ b/static/logo.png diff --git a/static/public/pgp.pub.txt b/static/public/pgp.pub.txt new file mode 100644 index 0000000..cecce64 --- /dev/null +++ b/static/public/pgp.pub.txt @@ -0,0 +1,110 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQINBF5zMOcBEADL3CTqwOUm6S9LlrBo72oOHn3RCpZH7VpogE/ynNID2lsajPG8 +Izsfuy2WuUOyS5rJaUwUa/eitR5fEAjJWeDaDXDuYZAE2J1ZwkFavXQAI01H7Efb +jkPUGiIXtnVWt70uifPCugYyIW4LzTLai5bxE8mrjTXVNq/R36trg+BKVim5QXLZ +mKytNjuUmQANZcgQpeNjW/nXrCsYRd0qpqdqVynEalPX2EZaFZGQYZ3rL+pXpR4e +PH5SmuC4Q5+HoD/qzLjtG+k78PzZj3x+hjC3hm+FRH+CrovYZVQOLshX7FkAfCS0 +u8n1mRoYODfzrZbrT462aAEaZEKd+5JMa3NwHdxTNgWP7oeQqAKztMeKXE+iJ3B6 +q3J5pmJfywxGCyGk7MJUaIF+kFo0qDVdT/Vt/rcR7flfKPug0UdXhAt0Ttpl450/ +fe3+hs1N8Ajix8RKIU5Gcvx4RFH8BdkY8AXa9N3pgqSqUoKAeYnWmY0cOWeNqeV4 +xsisaq2WBgLoo4FGqWzM9B6b3dFbXof4HHR5yimmgKd9B48JqWAOBP5+SccRqOLq +utV08rC8xEQ31IIHM1iIThqmVX1I5gwurcGiaE+wHqRc03zqKFIyIwi8lrfxF8If +JRpeuxT3gS57cBz5Y4FIzZYjEn6Suj9AemnvEPPZ474tnDD5KpKqjE5FNQARAQAB +tCFyb21haW4gKEhlbGxvKSA8bWVAcmdvbmNhbHZlcy5zZT6JAkwEEwEKADYWIQSM +fW2vFPgUJkDOg+r4XNAttBnWjAUCXnMw5wIbAQQLCQgHBBUKCQgFFgIDAQACHgEC +F4AACgkQ+FzQLbQZ1owjvA/9E7z9HoTQMOlBS5Tg1axYouwH4+XZ7QDr/H3/ccTY +8HBaLpF5KAGcaV7C+WzbZf5zPoP4avcNFlir7ncm+8MJUDXp8XGSlFRWuQ/MLsVU +or81jOHCl0CXSdS1iUe0tNt9Mge9QfB1W7+au3byOCXj3KK7yfOBCYNbubWwoZq4 +wyPOg1zhsi3dSbKgnclS+sDyyJdZv+dzG5ZLuBbiA5qWchVTdKfGIYdft5C/i9c5 +V3FkFlCEyeQ6gYCoN22IHvhoIBXmORbYzzQwzXWOf/0ViXRqrrbViQ1WgIP6blWP +pboko3ZaExCCVLCZ0W58wK1xQafK5uURmbh4NhL6guaOq285r9IOIRTb5tadkkR0 +qlDz36F4Pr1tSiQ+RvQoRMm11Zo84pr6wCmXn+jRLc4gS1JopeYhdFeE/TFFl/yM +J+S5T6KivUedWGB3jN52TC9F4acs3rVwcJHhxJtaE7zvWNnZh2ujEbbX41wk/g9/ +ZFJaC+2XLyw3Vgn78h7uzK1+3LrWi1e12qqeyITSviedDA3aFDhzbjlzI7wdjZhI +2XWHcGX1gxQEqx5XzOCaP76lj1E6tGsAB0140nggRhoqGbdYR2Ufh34AVkoSvQEA +j2A5aDWIc94neWfRyMHfuW2PFb2hFNtJSSajlxtEsg1/zKP8lRxw2IaHfeMpuNG1 +yyG5Ag0EXnMyQQEQAOJJ016xc91HLpJxd4WsK8BmCTLMmNZf4xfJOSaCCEC7Uh7r +7fybIsFWJUf/fMf1seBZ0IB2mznaKp6fE78gU1s/wKjQl6yYxt2dmXvoOpCTCb1B +Zqu2lN54h2+OvRyq/UPXxOCKVZfMqrc6C/eoyl4VorUfBJrhg9VVbciqIOnO11uJ +UMQZQsYr7uvdFFJYyePI4FyjCytUPnnH38IIHlyL8YYf8mo3TJJGkohuAw/a87GY +AIFpxk39obIuLbHpQAKSoQKlPCjEjGD/c9dSLmkl/16XnWyMuyIcv6Vw2ek2f0TL +Bj5Jo26YXwU7+JJL4N3RgEAW6XLEa5Ylirpskt6qjHjlyNfxtnefrVMOL4k/hANQ +MlBdnE+5oONUlXcuVgSsCGtuMsV2P8dI5Hw3Cr9YkFPzkpJhLLdwPcCLvZz5DM7C +xrv6+TJEPqtVN3V9ZupRUprS+8E61XfdTZX1CYNytYTHGpb7qJ2wsvPST/GvZbui +Aa6CrwJb7RkCkoaD0kf5iIDpCmtMZtESivqrbC7J1KONCXL/uK6G5aW/Vr8Gqnvl +B5vZLb7GxJpYISkmGtegHAGOCd3ecGUJf8S3DLHyghskt2JKsUszaWqHmTsYYLQ4 +QB0ihz3ikoRMs9nd3k+CZwI8BMNKQE0l0rQCxlXhjCGwoibxNFA+vFq4kXcHABEB +AAGJBGwEGAEKACAWIQSMfW2vFPgUJkDOg+r4XNAttBnWjAUCXnMyQQIbAgJACRD4 +XNAttBnWjMF0IAQZAQoAHRYhBNb92WprxEfuG/J00SQUnphu2qDFBQJeczJBAAoJ +ECQUnphu2qDFARAQAK0Qs5KGWE1Ark8d0efTr8zQExebx8QJjsIXhdDxy/xJSt1l +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 +jMkprlyrNuAcrXbn0AsZnS79DA== +=2hJ5 +-----END PGP PUBLIC KEY BLOCK----- + @@ -0,0 +1 @@ +#!/bin/bash diff --git a/templates/base.html b/templates/base.html new file mode 100644 index 0000000..0795d4a --- /dev/null +++ b/templates/base.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <title>rgoncalves.se</title> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0 minimum-scale=1"> + <link rel="icon" type="image/png" href="logo.png"> + <link href="/style/style.css" rel="stylesheet" type="text/css"> + </head> + <body> + <header> + {% if title is defined %} + <h1>{{ title }}</h1> + {% else %} + <h1>rgoncalves.se</h1> + {% endif %} + <nav> + + <a href="/">home</a> + <a href="/writeups/">writeups</a> + <a href="/services/">services</a> + <a href="/public">public</a> + <a href="http://git.rgoncalves.se">git</a> + <a href="https:/gitlab.com/rgoncalves.se/infrastructure/">infrastructure</a> + </nav> + </header> + + {% block content %} {% endblock %} + + <footer class="delimiter"> + <p>Proudly powered by <a target="_blank" href="https://ungleich.ch">ungleich.ch</a>'s servers and dam !</p> + <p>Zero carbon - 100% renewable energy</p> + </footer> + </body> +</html> diff --git a/templates/directory-page.html b/templates/directory-page.html new file mode 100644 index 0000000..5b2c5d5 --- /dev/null +++ b/templates/directory-page.html @@ -0,0 +1,7 @@ +{% extends "base.html" %} + +{% block content %} + +{{ page.content | safe }} + +{% endblock content %} diff --git a/templates/directory.html b/templates/directory.html new file mode 100644 index 0000000..c4130fb --- /dev/null +++ b/templates/directory.html @@ -0,0 +1,9 @@ +{% extends "base.html" %} + +{% block content %} +{% for page in section.pages %} +<article> + {{ page.date }} : <a href="{{ page.permalink | safe }}">{{ page.title }}</a> +</article> +{% endfor %} +{% endblock content %} diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..87812ea --- /dev/null +++ b/templates/index.html @@ -0,0 +1,30 @@ +{% extends "base.html" %} + +{% block content %} + +<p> + My name is Romain GONCALVES, usually rgoncalves/binary550 on git. +</p> +<p> +Actually studying computer science, I would like to progress in infrastructure and administration of +Unix based systems. +Running my machines on Archlinux and OpenBSD, I deploy and maintain my internal servers and services +for my own use. Moreover, I develop my own solutions or set of scripts. +</p> + +<h2>crypto</h2> +<ul> + <li><code>pgp</code> <a href="public/pgp.pub.txt">8C7D 6DAF 14F8 1426 40CE 83EA F85C D02D B419 D68C</a> +</ul> + +<h2>contact</h2> +<nav> + <a target="_blank" href="https://github.com/binary550">github</a> + <a target="_blank" href="https://gitlab.com/binary550">gitlab</a> + <a target="_blank" href="https://artstation.com/binary550">artstation</a> + <a target="_blank" href="https://matrix.to/#/@romaingoncalves:ungleich.ch">matrix</a> + <a target="_blank" href="https://www.linkedin.com/in/rgoncalvesse/">linkedin</a> + <a href="mailto:contact@rgoncalves.se">contact@rgoncalves.se</a> +</nav> + +{% endblock content %} diff --git a/templates/robots.txt b/templates/robots.txt new file mode 100644 index 0000000..c6742d8 --- /dev/null +++ b/templates/robots.txt @@ -0,0 +1,2 @@ +User-Agent: * +Disallow: / diff --git a/templates/sitemap.xml b/templates/sitemap.xml new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/templates/sitemap.xml @@ -0,0 +1 @@ + diff --git a/update_images b/update_images new file mode 100755 index 0000000..fd8f8fa --- /dev/null +++ b/update_images @@ -0,0 +1,15 @@ +#!/bin/bash +# +# Update pictures, +# recursively remove metadata and decrease file size, +# for each pictures + +IMG_DIR="static/images" +IMG_LIST=$(find ${IMG_DIR}) +IMG_MAX_SIZE="250k" + +for img in ${IMG_LIST[@]}; do + jhead -purejpg "${img}" + jpegoptim --size "${IMG_MAX_SIZE}" "${img}" +done + |