ITwikien er bestemt avviklet. Frist for å få systemdokumentasjon over i Gitlab i tråd med nye føringer for IT-avdelingen, er september 25.

Brukar:Mihho: Skilnad mellom versjonar

Frå ITwiki
 
Line 249: Line 249:
eller kanskje bare rute alt:
eller kanskje bare rute alt:
  sshuttle -r username@login.uib.no 0/0 --dns
  sshuttle -r username@login.uib.no 0/0 --dns
Det skal også være mulig å endre .ssh/config fila slik at en kan kjøre kommandoene enklere:
<pre>
Host login
    HostName login.uib.no
    User mihho
Host p1kro01
    HostName p1kro01.uib.no
    User helgeo
    ProxyJump login
</pre>
og så kun:
scp /path/to/local/file p1kro01:/path/to/remote/


==Logge inn som admin i mso.uib.no Drupalen==
==Logge inn som admin i mso.uib.no Drupalen==

Siste versjonen frå 25. november 2025 kl. 16:40

File:EL-KRO.pdf

Starte Cisco VPN fra kommandolinje

/opt/cisco/secureclient/bin

og så:

./vpnui

skriv inn: vpn3.uib.no

Sende ut en Test epost fra wordpress multisite med wp-cli

wp eval 'wp_mail("helge.opedal@uib.no", "Testmail fra WP-CLI", "Hei! Dette er en test av wp_mail().");'

Sikre uploads kataloger slik at .php og andre filer ikke kan kjøres

Legg dette inn i .htaccess

<FilesMatch "\.(php|php3|php4|php5|php7|phtml|phps|py|pyc|pyo|pl|cgi|sh|bash|rb|exe|dll|com|bat|cmd|jsp|jspx|asp|aspx|shtml|shtm|fcgi)$">
    Order Allow,Deny
    Deny from all
</FilesMatch>

Finne alle .no domenene til UiB

Gå til:

Skriv inn:

874789542

Alternativ html publisering utenfor UiB?

I og med at vi prøver å få avviklet folk.uib.no så kan det være en mulighet for brukerne å publisere på github.io i stedenfor. Beskrivelse er lagt ut her:

Lage grafer på Linux

pip install matplotlib

Lag en pie.py fil med:

import matplotlib.pyplot as plt

# Your data
labels = ['Kubernetes/Docker', 'Wordpress', 'Skjemaker', 'Mediawiki', 
          'Brukerstøtte', 'Avviklingsarbeid', 'Diverse']
sizes = [20, 10, 10, 10, 20, 20, 10]
colors = ['#3498db', '#9b59b6', '#e74c3c', '#f39c12', '#2ecc71', '#1abc9c', '#34495e']

# Create pie chart
plt.figure(figsize=(10, 7))
plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%',
        startangle=90, pctdistance=0.85)
plt.title('Oppgaver Helge Årshjul')
plt.axis('equal')
plt.savefig('helge_piechart.png', dpi=300, bbox_inches='tight')
plt.show()

Kjør!

python3 pie.py

og så voila får du en flott pie chart. Som ligger under:

Arbeidsoppgaver 2025/2026 (estimert, samt pledge) Brukerstøtte, drift, forvaltning, videreutvikling og avvikling

I tillegg til saker på https://hjelp.uib.no så registreres drift og forvaltnings oppgaver her:

Oppgave Timer per uke Dager per måned Dager per år
Kubernetes/Docker 7,5 3,8 45
BetalMeg-skjema 0,25 0,1 1,5
Møter 1,5 0,8 9
Wikihost (drift/forvaltning/oppgr./avvikling) 3 1,5 18
Skjemaker (drift/forvaltning/oppgr./avvikling) 4 2 24
WordPress (drift/forvaltning/oppgr./avvikling) 4 2 24
Webhotell (egendrift, avvikling) (https://vis.uib.no, birkeland.uib.no m.m.) 2 1 12
Grind (https://kringom.no) 0,25 0,1 1,5
Egenutvikling (KI, Interactiv+, Docker, Kubernetes, og andre kurs (Udemy online)) 3 1,5 18
Bash og PHP-utvikling 1 0,5 6
Turing-server i Dikult-kurser https://kursserver.k.uib.no/ 0,25 0,1 1,5
Apache Apex Reverse-proxy (https://reg.app.uib.no/kinobilletter, velferdshytter m.m.) 0,5 0,3 3
Generell brukerstøtte 7,5 3,8 45
Heldagssamlinger 0,5 0,3 3
Prating og diskusjoner 2 1 12
Støtte for Regelsamlingen https://regler.app.uib.no (Mona Viksøy) 0,25 0,1 1,5
Workshops 0,5 0,3 3
IT-sikkerhetsarbeid 2 1 12
Sum 40,25 19 229

Oppgaver mer detaljer

System- og applikasjonsdrift

  • Oppsett og konfigurasjon av Apache/Nginx webservere
  • Administrere og oppdatere PHP-versjoner (Remi repository/Redhat Upstream, PHP-FPM)
  • Konfigurere Apache/Nginx VirtualHosts med blant annet SSL config
  • Fornye og installere SSL-sertifikater (Let's Encrypt og Harica)
  • Overvåke og feilsøke i logger (Apache/Nginx, PHP-FPM, systemd, cron, exim)
  • Oppsett av cronjobber for automatiske oppgaver
  • Holde applikasjoner oppdatert med sikkerhetsoppdateringer
  • Feilsøking av webapplikasjoner og ytelsesproblemer
  • Konfigurere brannmur og IP-restriksjoner (iptables, ipset, Require ip)
  • Tilgangsstyring og brukerkonfigurasjon på Linux-servere og webapplikasjoner (tilgang.uib.no)

Databaser (MariaDB og PostgreSQL)

  • Opprette og administrere databaser og brukere
  • Importere og eksportere data (.sql, .dump)
  • Optimalisere ytelse (my.cnf) og indekser
  • Gjenopprette sikkerhetskopier (disaster recovery)
  • Kjøre database-dump i forbindelse med arkivering eller avvikling
  • Pakke og lagre databasekopier i TSM og Billy tjenesten (mariadump, tar og gzip)
  • Skrive og teste SQL-spørringer (extrahere ut bruker data og statistikker)
  • Overvåke databaseforbindelser og ressursbruk

Webapplikasjoner og CMS

  • Installere, oppdatere og konfigurere WordPress
  • Oppsett av multisite Wordpress
  • Installere og oppdatere plugins og temaer via WP-CLI
  • Administrere MediaWiki-installasjoner og utvidelser (extensions and skins)
  • Feilsøking i PHP-applikasjoner
  • Utforske konfigurerering av SimpleSAMLphp for autentisering
  • Utforske og lære om Integrasjon mot Azure AD
  • Konfigurere LDAP innstillinger for applikasjoner som ikke støtter SAML
  • Administrere filrettigheter og eierskap for webfiler og kataloger (chown, chmod, chgrp)
  • Overvåke og sikre filer og konfigurasjoner (stat, git, dsmc)

Avvikling og arkivering

  • Planlegge og gjennomføre avvikling av eldre PHP-applikasjoner
  • Pakke applikasjonsfiler som .tar.gz for langtidslagring
  • Kjøre database-dump'er
  • Lagring av applikasjoner og databaser i TSM og Billy tjenesten
  • Dokumentere hva som er arkivert, og hvor det er lagret
  • Fjerne utdatert kode og konfigurasjon fra produksjonssystemer
  • Samarbeide med applikasjonseiere for å avklare behov før avvikling
  • Redhat Linux server avvikling
  • Gi informasjon til brukere om planlagt nedstenging
  • Motta og håndtere tilbakemeldinger fra brukere
  • Delta i møter med web-applikasjonseiere for status og avklaringer
  • Sikre at persondata og sensitive opplysninger håndteres korrekt ved sletting

Docker og containere

  • Lage Dockerfiler for PHP- og andre web-applikasjoner
  • Skrive og vedlikeholde docker-compose.yml i Dockerhost Test
  • Bygge og publisere containere til GitLab Container Registry
  • Koble containere til databaser (MariaDB/PostgreSQL), kubectl create secrets
  • Lære mer om feilsøking av nettverk og volumer i Docker
  • Lære mer om optimalisering av containerstørrelse og sikkerhet
  • Lære mer me om håndtere miljøvariabler og secrets i containere

Kubernetes og CI/CD

  • Lære mer om og skrive og vedlikeholde YAML-filer for Deployments, Services, Persistent Volume Claim's og Ingress
  • Bruke kubectl for testing
  • Opprette secrets
  • Håndtere pods i namespaces med kubectl og k9s
  • Lære mer om å sette opp GitLab CI/CD pipelines for automatisert utrulling
  • Lære om å feilsøke ImagePullBackOff og Ingress 404-feil
  • Implementere sikkerhetskrav (ikke kjøre som root)

Utvikling og automatisering

  • Skrive Bash-skript for drift, backup og overvåkning
  • Skrive og teste PHP-kode
  • Bruke Git og GitLab for versjonskontroll
  • Lære mer om automatisering av oppgaver i CI/CD pipelines

Sikkerhet og autentisering

  • Beskytte passord og hemmeligheter (kryptering, rettigheter, secrets)
  • Implementere tofaktorautentisering der dette er mulig (2FA): phpmyadmin, Skjemaker, wordpress
  • Begrense tilgang basert på IP og brukerroller
  • Oppdage og hindre brute-force eller bots
  • Gjennomføre sikker sletting ved avvikling
  • Gjennopprette filer fra TSM ved kryptovirus eller andre uhell (dsmc restore)
  • Jobbe tett med IT sikkerhetsgruppen og delta på IRT (Incident Response Team)

Forvaltning og kommunikasjon

  • Planlegge, følge opp og dokumentere applikasjonsdrift og forvaltning
  • Kommunisere med brukere og applikasjonseiere
  • Skrive bash og php script for masse-utsending av eposter (mutt og php)
  • Utarbeide informasjon ved endringer eller nedstenging
  • Delta i møter med fagmiljø og ledelse
  • Samarbeide på tvers av grupper for felles løsninger
  • Skrive teknisk dokumentasjon og rutinebeskrivelser
  • Registrere og følge opp saker i itgit.app.uib.no backlog repoet eller tilsvarende systemer

Overvåkning og vedlikehold

  • Analysere systemytelse (CPU, RAM, diskbruk)
  • Bruke blant annet: du, df, htop og systemctl
  • Overvåke applikasjonslogger og feilmeldinger
  • Rydde opp gamle filer, logger og midlertidige data (find /backup -type f -andre-opsjoner -exec rm -f {} \;)

Legge på passord på pdf

qpdf --encrypt secret1234 owner-password 256 -- input.pdf output_encrypted.pdf

Oversikt og søk i Wordpress databasen, multisite-wordpress

Helge har passordet:

Oversikt og søk i Skjemaker skjema og skjema eiere

På oppdrag fra Brita har jeg laget følgende:

og

Passord får en av meg.

Kikke i andre Topdesk gruppers saker

Gå til denne, og søk etter: "IT-" skroll i listen

Kjøre cron for lokal bruker på p1kro01

Brukere på p1kro01 kan kjøre egne cronjobber lokalt

crontab -e

og legg inn typisk:

10 15 * * * /home/mihho/test.sh

Om det er en enkelt test, så kan en f.eks sende en epost:

#!/bin/bash

# Variables
TO_EMAIL="helge.opedal@uib.no"
SUBJECT="Cron Test"
BODY="This is a test email from cron at $(date)."

# Send email using mutt
echo "$BODY" | mutt -s "$SUBJECT" "$TO_EMAIL"

eller om en skal kjøre en rsync jobb:

#!/bin/bash
 
# Variables
REMOTE_USER="ubuntu"
REMOTE_HOST="158.37.64.60"
REMOTE_DIR="/path/on/remote"
LOCAL_DIR="/path/to/local"
SSH_KEY="/home/youruser/.ssh/id_rsa_test"   # replace with your private key path
 
# Run rsync
rsync -avz -e "ssh -i $SSH_KEY -o StrictHostKeyChecking=no" "$LOCAL_DIR/" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR"

Bruke login.uib.no som jumphost for å nå andre interne ressurser uten VPN

ssh -J mihho@login.uib.no helgeo@p1kro01.uib.no

eller for scp:

scp -J mihho@login.uib.no /path/to/local/file helgeo@p1kro01.uib.no:/path/to/remote/

eller kanskje bare rute alt:

sshuttle -r username@login.uib.no 0/0 --dns

Det skal også være mulig å endre .ssh/config fila slik at en kan kjøre kommandoene enklere:

Host login
    HostName login.uib.no
    User mihho

Host p1kro01
    HostName p1kro01.uib.no
    User helgeo
    ProxyJump login

og så kun:

scp /path/to/local/file p1kro01:/path/to/remote/

Logge inn som admin i mso.uib.no Drupalen

ssh helgeo@p1kro01
cd /var/www/sites/mso/htdocs
drush/drush user-login

som da gir ut typisk noe ala:

Husk å endre "default" til domenenavnet mso.uib.no

Kopiere en fil over jumphosten til server

Noen servere ligger bak en jumphost, og det er av til litt herk med å kopiere filer fra en server til en annen. En kan da gjøre det direkte med følgende scp kommando:

scp -o ProxyJump=mihho@p1publogin minfil.txt  helgeo@p1skjemaker04:/tmp

Så her kopieres minfil.txt over Jumphost p1publogin til /tmp mappen på p1skjemaker04 som ligger bak Jumphosten. NB: husk at nøkler må være på plass i id_rsa og id_rsa.pub

Lei av Docker containerne dine? Slett de rått og brutalt

docker stop $(docker ps -q)
docker rm $(docker ps -aq)
docker system prune -a --volumes

Spinne opp Regelsamlingen på lokal maskin

En må ha en lokal Docker CE kjørende. Deretter:

git clone git@git.app.uib.no:it/site/regler.app.uib.no.git
cd regler.app.uib.no

deretter:

docker build -t regelsamlingen .
docker run -p 8080:80 regelsamlingen

og så voila!

Skjemaker SAML SSO i Azure

Gå til:

Deretter søk etter: Enterprise applications Da får en opp alt mulig. Da kan en søke i neste søkefelt etter: skjemaker Da skal to innslag komme opp. Trykk på en av de. Deretter i venstre meny: Manage-Properties

Interact+ kurs stikkord

Logg inn:

Sett anbefalt norsk i nettleseren. Settings i Chrome

Lag først en mal, legg til Stegene

Referanse nummer: Krøllalfa funksjon, eksempel: @Dialogue.Referenceid Fjern til @, deretter liste, velge ved: CTRL click

Elementer: Gruppe, felter i gruppe. Tips: autocomplete-type

Predefinerte verdier, eks: @Login.FirstName

Nyttig for brukeren, nettleser-lagrede data

Tips: @Data.OrganizationName

Logikktyper: Synlighet, Validering og Verdiformel


Steg - Avvlevering: Integrasjoner: websak, epost skjemaadmin,

Integrasjoner kan ikke kopieres fra et skjema til et annet

hjelp

Ineract community:

Mer site ripping

yt-dlp --write-pages --no-video "https://birkeland.uib.no/"

og:

scrapy startproject birkeland_scraper
# Then create a spider to crawl the site

Sortere logg fil på dato og tid

Om du har logg linjer som dette:

129.177.6.11 - - [06/Sep/2025:20:28:02 +0200] "GET /data/form_13410848/files/element_1_2e57f0276bd0567a0373317ea20372e8-e1xzln6r-15hrzzpu.pdf.tmp HTTP/1.0" 200 104791 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.7204.183 Mobile Safari/537.36 (compatible; GoogleOther)"

så kan du sortere de på dato på følgende måte:

sort -k4,4 -t'[' access.log

httrack på Kro

/usr/local/bin/httrack

Wordpress wp-cli

Site rippe birkeland.uib.no og andre wordpress siter

Om en PHP site ikke blir oppdatert på innhold lenger, så kan en site-rip være aktuelt. Da får en en html kopi av nettsiden, og den kan i praksis leve i evig tid uten at en trenger å tenke på core/plugin oppgraderinger, sikkerhetshull osv. Den blir da 100% sikker. Legger ved under noen eksempler med wget og httrack. Måler er å finne et verktøy med riktige opsjoner som lager en siterip så lik som mulig original nettsiden.

wget

wget --mirror --convert-links --adjust-extension --page-requisites \
    --no-parent --user-agent="Mozilla/5.0" \
    --wait=1 --random-wait \
    "https://turspor.h.uib.no"
httrack https://birkeland.uib.no/ -O /home/helge/Httrack/birkeland -%v -N100

En kan også se på en plugin for å eksportere alt innhold over til statisk html:

simple-static

En mer utvidet httrack kommando:

httrack "https://expearth.uib.no/" -O "/home/helge/Httrack/expearth" \
  --ext-depth=2 \
  --near \
  --test \
  --robots=0 \
  --timeout=60 \
  --retries=3 \
  --max-rate=200000 \
  --user-agent="Mozilla/5.0" \
  -*.css.map \
  -*.js.map \
  +*.css* +*.js* +*.png* +*.jpg* +*.jpeg* +*.gif* +*.svg* +*.webp* \
  --assume css=text/css,js=application/javascript \
  --disable-security-limits \
  --keep-alive

og kanskje denne går fortere:

httrack "https://vis.uib.no/" -O "/home/helge/Httrack/vis.uib.no" \
  --ext-depth=1 \               # only follow external links 1 level away
  --robots=0 \                  # ignore robots.txt to avoid skipped resources
  --timeout=30 \                # faster timeout for slow URLs
  --retries=1 \                 # only retry once on failure
  --sockets=12 \                # download 12 files in parallel
  --max-rate=0 \                # no bandwidth limit
  --user-agent="Mozilla/5.0" \ # pretend to be a browser
  --update \                    # resume / only download new or changed files
  --keep-alive \                # reuse connections for faster transfers
  --assume css=text/css,js=application/javascript \
  --disable-security-limits \   # allow aggressive downloading
  --wait=0 --random-wait \      # minimal wait between requests
  -*.css.map -*.js.map -*v=* \ # skip unnecessary versioned or source map files
  -*.php?* -*/wp-login.php -*/wp-admin/* \  # skip backend / login pages
  +*.css* +*.js* +*.png* +*.jpg* +*.jpeg* +*.gif* +*.svg* +*.webp* \

Etter en del tester, så ser jeg at wget av og til ikke får meg seg noen bilder. Det er mulig at denne wget kommandoen er noe bedre. Men samtidig, en bør kjøre wget'en et par ganger, det hender den får meg seg bildene i runde 2.

wget --mirror --convert-links --adjust-extension --page-requisites \
    --no-parent --span-hosts --robots=off \
    --accept=jpg,jpeg,png,gif,svg,webp \
    --user-agent="Mozilla/5.0" \
    --wait=1 --random-wait \
    "https://turspor.h.uib.no"

Matomo Dashboard for Medieval wiki'en

Søke etter feil i html koden din?

tidy -errors -q index.html

Hente ut LDAP detaljer på din UiB konto

Teste ut Powershell på Linux?

Kjør opp en docker container. Dockerfile:

# Use the official PowerShell image from Microsoft
FROM mcr.microsoft.com/powershell:latest

# Set working directory
WORKDIR /scripts

# Start PowerShell by default
ENTRYPOINT ["pwsh"]

Deretter:

docker build -t my-powershell .

og

docker run -it my-powershell

og så:

$PSVersionTable.PSVersion

Mounte opp til hjemmeområde Voss og Billy

Legg inn i /etc/fstab:

//voss.uib.no\mihho	/home/helge/voss	cifs credentials=/root/secret.txt,suid,sec=ntlmsspi,rw    0 0
//klient.uib.no\FELLES\BILLY\ADM\IT\Publisering\Backupwebkat    /home/helge/billy    cifs credentials=/root/secret.txt,suid,sec=ntlmsspi,rw    0 0

Og i filen secret.txt

username=mihho
password=
domain=UIB

Skriv inn passordet ditt, lagre filen. Deretter:

mount -a

Deretter fjern passordet fra secret.txt fila

Så kan du se filene i en vanlig katalog på din Linux maskin:

/home/helge/voss

Teste og fikse kubernetes yaml kode

Teste kjapt med docker på laptop

docker build -t hacked2 .
docker run -d --name hacked2  -p 8080:80 hacked2
docker exec -it hacked2 /bin/bash

og så:

Deretter

docker stop hacked2
docker rm hacked2

Finne filer innenfor en tidsperiode

find . -type f -newermt "2024-01-01" ! -newermt "2024-03-01" -ls

Konvertere en video fil til et annet format

ffmpeg -i input.mkv -c:v libx264 -c:a mp3 -b:a 192k output.mp4

Delte dockerimages på tvers for alle

RAIL NOTATER

Sjekk KRO, i katalogen:

/root/scripts/helge/RAIL

PHP filer i images katalogene på Wikihost?

En måte å loope gjennom X antall images kataloger for diverse wiki'er for å se om det kan ha sneket seg inn noen PHP filer kan gjøres med følgende bash kode:

for i in $(find . -maxdepth 3 -type d -name "images"); do
  echo "find $i -type f -name '*.php'"; done > runme.sh
chmod 750 runme.sh
./runme.sh

og etter å kjørt denne, fant jeg bare 1 fil, min egen hacker.php fil :-)

./itwiki/code/images/hacker-helge-test.php

open_basedir virker ikke i Apache

Når en bruker php-fpm så blir linjer som dette i apache vhost ignorert:

php_admin_value open_basedir /var/www/sites/turspor

det gjør at om en hacker greier å laste opp en PHP fil, så vil hackderen kunne eksekvere denne og deretter lese innhold i filer som er aksessbar for Apache brukeren. En nødløsning er å legge til linjer i .htaccess filen i kataloger som applikasjonen laster opp filer til. Da nektes PHP filen å bli eksekvert:

Eksempel 1

# In upload directory's .htaccess
<FilesMatch "\.(php|phtml|php3|php4|php5|pl|py|jsp|asp|sh)$">
    Require all denied
</FilesMatch>

Eksempel 2, fra en Drupal site

# Set the catch-all handler to prevent scripts from being executed.
SetHandler Drupal_Security_Do_Not_Remove_See_SA_2006_006
<Files *>
  # Override the handler again if we're run later in the evaluation list.
  SetHandler Drupal_Security_Do_Not_Remove_See_SA_2013_003
</Files>

Ulempen er at en må identifisere upload katalogene til PHP applikasjonen. For wordpress/drupal er det enkelt, for andre himasnekra PHP applikasjoner, så må en lete etter nålen i høystakken.

streame en mp4 fra S3

Selve videoen (full screen, mobile, autostart):

HTML koden:

Full feature ubuntu docker container lokalt

Her er en Dockerfile som kan brukes for å kjøre opp et ubuntu miljø lokalt:

# Dockerfile
FROM ubuntu:24.04

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y \
    bash-completion \
    curl \
    wget \
    git \
    vim \
    nano \
    htop \
    net-tools \
    iputils-ping \
    dnsutils \
    lsof \
    tcpdump \
    strace \
    gdb \
    build-essential \
    python3 \
    python3-pip \
    php \
    php-cli \
    php-mbstring \
    openssh-client \
    sudo \
    unzip \
    gnupg \
    software-properties-common \
    rsync \
    screen \
    tmux \
    ca-certificates \
    && apt-get clean

CMD ["/bin/bash"]

For å fyre den opp:

docker run -it --rm   --name my-lab   --hostname labbox   --cap-add=SYS_PTRACE   --security-opt seccomp=unconfined   linux-lab:latest

Sette en cronjob på pause i Kubernetes

Denne skal visstnok sette en cronjob på pause

kubectl patch cronjob turspor-db-backup -n adm-it-pub-turspor -p '{"spec" : {"suspend" : true }}'

For aktivere den igjen:

kubectl patch cronjob turspor-db-backup -n adm-it-pub-turspor -p '{"spec" : {"suspend" : false }}'

For å liste ut status:

kubectl get cronjob turspor-db-backup -n adm-it-pub-turspor -o jsonpath='{.spec.suspend}'; echo

Forsøk på filopplasting til s3 bucket helloworld i nrec

For å få en status:

Blir fontene og ikonene for små når du kopler til skrivebord.uib.no?

Med xfree så kan en bruke scale for å øke størrelsen:

xfreerdp /u:mihho /v:skrivebord.uib.no /w:2200 /h:1400 /scale:180 /scale-desktop:180

Gjøre tilgangen til et Skjemaker skjema litt mer vrient

https://skjemaker.app.uib.no/view.php?id=5050770&secretkey=ThisIsTheSecretPassw0rd

vil gi tilgang til skjemaet, mens:

https://skjemaker.app.uib.no/view.php?id=5050770

ikke gjør det. Det er et javascript som obscurer det. Så om en hacker sjekker koden, så finner de ut av det. Men en bot som travaserer seg gjennom 17 000 skjemaer ved å la id være et løpenummer, vil antakelig kanskje ikke få det med seg. Javascript koden er:

mounte uibfelles på Linux

sudo mkdir /mnt/uibfelles
sudo mount -t cifs //felles.uib.no/UiBFelles /mnt/uibfelles -o username=mihho,domain=uib

Kopiere ut en tidligere versjon av Dockerfila

git show 75b910a6caf11880d01b4ed29fed25b52775f5fd:Dockerfile > Docker.copy

Lag en lang streng f.eks for an katalog eller passord kjapt og gale

mkdir "$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)"

Sende epost til ledere i sammenheng med avvikling av UiBFelles

Foreløpig roter jeg med div script her:

/root/scripts/Avvikling_UiB_Felles/runde2/temp/tmp
Create-Send-Email-Script.sh

finner alle filer som heter temp_fil_EMAIL. Tar ut EMAIL. Deretter fikser innholdet i filen slik at listen blir pyntelig. Deretter lage en body_text, og så spytter ut en mutt commando.

Må testes grunding

Endringer i deploy i kubernetes?

kubectl rollout restart deployment turspor -n adm-it-pub-turspor

ser ut til å funke

Onedrive i skyen

Kjøre backup av en katalog i RAIL

Dersom du har et script i RAIL som pakker en katalog og sender til S3 og du ønsker å kjøre den i crontab, så ser ikke det ut til å fungere på selve cluster boksen. Men en kan trigge scriptet ved å kjøre følgende fra en annen maskin:

ssh helgeo@login-01.bgo1.test.rail.uhdc.no '/home/helgeo/scripts/TursporBackup.sh'

Her er TursporBackup.sh:

#!/bin/bash
cd /home/helgeo/scripts/
PODNAME=$(kubectl get pods -n adm-it-pub-turspor -l app=turspor -o jsonpath='{.items[0].metadata.name}')
kubectl cp -n adm-it-pub-turspor "$PODNAME:/var/www/html/wp-content/uploads" ./uploads
tar czf turspor_uploads_backup_$(date +%Y%m%d_%H%M%S).tar.gz uploads
source keystone_rc.sh
swift upload turspor turspor_uploads_backup_*.tar.gz
find . -type f -mtime +5 -name 'turspor_uploads_backup_*.tar.gz' -exec rm -f {} \;

caching i docker build

Jeg prøvde å legge til filer i en wordpress docker image, men de kom ikke med. Det viste seg da at docker build kommandoen ignorerte de nye filene grunnet caching. Det en kunne se under byggeprosessen var følgende linjer:

#12 [6/9] COPY html/ /var/www/html/
#12 CACHED

Løsningen var å legge til --no-cache i .gitlab-ci.yml fila:

docker build --no-cache -t git.app.uib.no:4567/it/site/turspor.h.uib.no/turspor:prod .

Fjerne ikke eksisterende eposter i en liste

Dersom en har to filer:

epostlisten

og

ikke-eksisterende_eposter

hvor den første innholder både eksisterende og ikke eksisterende eposter, så er det ønskelig å oppdatere "epostlisten" slik at ikke-eksisterende eposter blir fjernet. Dette for å unngå at scriptet prøver å sende til epost adresser som ikke eksisterer i ldap typisk. Da kan en kjøre følgende kommando:

grep -v -F -f ikke-eksisterende_eposter epostlisten > epostlisten.vasket

Søke etter filer og kataloger som Apache brukeren har skrivetilgang til

En bør unngå så langt det er mulig at Apache brukeren er eier og/eller kan skrive til kataloger og filer. For å søke etter disse kan en gjøre noe ala dette:

find . -maxdepth 3 -user apache -ls | egrep -v proc | egrep -v log | egrep -v 'sess|tmp|images|cache'

Slette gamle filer i en S3 bucket

Dette ser ut til å kun fungere med .tar.gz filer. Om filen er en .jpg eller .png, så fungerer det ikke, da ved nedlasting så settes current timestamp. Først laste ned en kopi av hele bucketen:

swift download turspor

Deretter bruke find for å finne gamle filer sammen med delete:

find tmp/ -mtime +6 -exec swift delete turspor {} \;

Om en roter det til, så har en fortsatt en lokal kopi. Om en ønsker å rydde lokalt så gjør en det tilsvarende:

find tmp/ -mtime +6 -exec rm -f {} \;

For å kunne slette alle filer som er eldre enn en viss dato så må en til med et bash script. Denne ser ut til å gjøre jobben:

#!/bin/bash
BUCKET="helloworld"
DAYS=1

# Today's date minus 2 days, in YYYY-MM-DD format
cutoff_date=$(date -d "-${DAYS} days" +%F)

# Debug print
echo "Deleting files from container '$BUCKET' older than: $cutoff_date"

# List objects with dates and filenames, and loop through them
swift list "$BUCKET" -l | awk '{print $2 "," $5}' | while IFS=',' read -r file_date file_name; do
    if [[ "$file_date" < "$cutoff_date" ]]; then
        echo "Deleting: $file_name (Date: $file_date)"
        swift delete "$BUCKET" "$file_name"
    fi
done

Fjerne gamle mariadb-dump jobber i kubernetes

kubectl get jobs -n adm-it-pub-mariadb -o name | grep mariadb-dump | xargs kubectl delete -n adm-it-pub-mariadb

turspor s3

Lokalt på laptop:

sudo -i
source keystone_rc.sh
swift list turspor

debugging lokalt på laptop

docker build -t git.app.uib.no:4567/helge.opedal/mariadb-s3cmd/mariadb-s3cmd:prod .
docker run -it git.app.uib.no:4567/helge.opedal/mariadb-s3cmd/mariadb-s3cmd:prod bash
source /opt/venv/bin/activate
pip list

I bgo-test

kubectl get jobs -n adm-it-pub-turspor
kubectl delete job turspor-db-backup-manual-1746707762 -n adm-it-pub-turspor
kubectl apply -f turspor-mariadb-backup-cronjob.yaml
kubectl create job --from=cronjob/turspor-db-backup turspor-db-backup-manual-$(date +%s) -n adm-it-pub-turspor
k9s -n adm-it-pub-turspor

og så dukket det jammen opp en .sql fil i NREC:

db_backup_20250508_131950.sql

s3 nrec

keystone_rc.sh

export OS_USERNAME=Helge.Opedal@uib.no
export OS_PROJECT_NAME=uib-adm-it-pub-prod 
export OS_PASSWORD=habahabatsuttsut
export OS_AUTH_URL=https://api.nrec.no:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_USER_DOMAIN_NAME=dataporten
export OS_PROJECT_DOMAIN_NAME=dataporten
export OS_REGION_NAME=bgo
export OS_INTERFACE=public
export OS_NO_CACHE=1

OS_USERNAME og OS_PASSWORD finner en på:

og deretter:

source keystone_rc.sh

Og så:

openstack ec2 credentials list

.s3cfg

[default]
access_key = asdfljhasdøfghøasdgløsdjkg
host_base = object.api.bgo.nrec.no
host_bucket = object.api.bgo.nrec.no
secret_key = asdføljhadløfghsdkløghløsdkfhg

.aws/credentials

[default]
aws_access_key_id = asdføoljkadfsølghsdølfgølsdkfjg
aws_secret_access_key = asdfglhsdfølkgjhsdøfkghlsdkfjhg

.aws/config

[default]
region = <region>
s3 =
    signature_version = s3v4
    endpoint_url = https://object.api.bgo.nrec.no:8080/swift/v1/turspor

swift

pip3 install python-swiftclient
pip3 install python-keystoneclient
source keystone_rc.sh
swift list turspor
swift upload turspor Article_Title.pdf
swift download turspor Article_Title.pdf

Eksempel på db dump i cronjob

Og tilhørende Dockerfil

dumpe en mariadb database i RAIL kubernetes

kubectl exec -n adm-it-pub-turspor turspor-mariadb-statefulset-0 -- mysqldump -u root -p`cat /home/helgeo/.mysql` turspor_db > turspor$(date +%m%d).sql

En kan kanskje lagre dumpen inne i poden også på et PVC volume område:

kubectl exec -n adm-it-pub-turspor turspor-mariadb-statefulset-0 -- \
 sh -c 'mysqldump -u root -p"$(cat /home/helgeo/.mysql)" turspor_db > /var/lib/mysql/backups/turspor$(date +%Y%m%d).sql'

ssh-agent bruk en annen nøkkel (hint for Rail)

ssh-agent bash
ssh-add ~/.ssh/id_rsa_rail
git pull origin main

Og får å fjerne nøkkelen igjen:

ssh-add -d ~/.ssh/id_rsa_rail

Mulige yaml kode sjekkere?

  • KubeLinter
  • Datree

watch er en kul Linux kommando! Se live top IP er fra access_log for å feilsøke etter "synderen"

watch -n 1 'tail -n 100000 /var/log/httpd/access_log | awk "{print \$1}" | sort | uniq -c | sort -nr | head -10'

Som da gir ut "live" data på besøkende på din web nettside on-the-fly i access_log filen de siste 100000 linjene. Dette kan være nyttig for å vite hvilke IP'er er med på å dra ned nettstedet ditt..jepp

  77529 129.177.9.100
    589 20.185.79.47
    564 158.39.77.26
    540 52.142.24.149
    462 129.177.6.169
    462 129.177.6.125
    425 66.249.66.23
    194 20.171.207.138
    168 193.26.115.62
    165 52.169.5.58

Brukar:Mihho/RAIL-KLADD

Rsynce MariaDB (og senere Postgresql dump) sql dump filer fra NREC til On-Prem Linux host

rsync -av -e "ssh -i ~/.ssh/id_rsa_nrec_mariadb" rocky@mariadb.app.uib.no:/localvolume/backup/helge/* /backup/helge/NREC-MariaDB/

Og via crontab

11 3 * * * root rsync -av -e "ssh -i ~/.ssh/id_rsa_nrec_mariadb" rocky@mariadb.app.uib.no:/localvolume/backup/helge/* /backup/helge/NREC-MariaDB/

Forklaring: Dersom en har RAIL Kubernetes applikasjoner så kan de ikke "snakke" med databaser bak 129.177 brannmuren. Derfor kan vi sette opp en MariaDB/Postgresql boks i NREC (som i dag heter: mariadb.app.uib.no) som har databasene til RAIL applikasjoner. Når databaser dumpes der, må de rsynces ned til Linux on-prem for backup mot TSM og Billy.

Dumpe RAIL Kubernetes mariadb database til lokal fil

Først portforwarding:

ssh -L 3307:localhost:3306 helgeo@login-01.bgo1.test.rail.uhdc.no kubectl port-forward -n adm-it-pub-mariadb mariadb-statefulset-0 3306:3306

Deretter:

mariadb-dump -h 127.0.0.1 -P 3307 -u root -p corviz > /tmp/corviz-dump.sql

simsalabim

Et annnet alternativ kan også være å gjøre noe ala:

kubectl exec -it mariadb-pod -- bash -c "mariadb-dump -u root -pYOURPASSWORD database > /backup/db.sql"
kubectl cp mariadb-pod:/backup/db.sql /path/on/linux/server/
kubectl exec mariadb-pod -- tar -czf /backup/db.sql.tar.gz -C /backup db.sql
kubectl cp mariadb-pod:/backup/db.sql.tar.gz /path/on/linux/server/

Men siden / root disken er full på bgo1-test, så funker det jo ikke. Og

kubectl scp

eksisterer ikke?

Logg inn RAIL

#!/bin/bash
RAIL_PORT=$(ssh helgeo@login-01.bgo1.test.rail.uhdc.no grep -- --listen-address=127.0.0.1: .kube/config | cut -d: -f2)
ssh -L$RAIL_PORT:localhost:$RAIL_PORT helgeo@login-01.bgo1.test.rail.uhdc.no kubectl get pods
firefox http://localhost:22008
ssh helgeo@login-01.bgo1.test.rail.uhdc.no

Sist innlogget brukerliste i ITwikien

Min personlige git side

git clone git@git.app.uib.no:Helge.Opedal/etc.git

Flytte en katalog til eksisterende tar fil

tar --append --file=/backup/my-backup.tar /var/www/app/skjemaker/htdocs/data/form_NNNNNN/

Kubernetes_workshop_dag_8

Kubernetes_workshop_dag_7

Kubernetes_workshop_dag_6

Kubernetes_workshop_dag_5

Corviz_i_Kubernetes_workshop_dag_4

Corviz_i_Kubernetes_workshop_dag_3

Corviz i Kubernetes workshop dag 2

mariadb.app.uib.no MariaDB Test i Nrec Helge

Rocky 8 i Nrec:

158.37.65.236

Logg inn:

ssh helgeo@p1kro01
ssh mihho@p1publogin
ssh helgeo@d1helge01
sudo -i
ssh -i .ssh/id_rsa rocky@158.37.65.236

Eller:

ssh -i ~/.ssh/id_rsa_mariadb rocky@mariadb.app.uib.no

For å logge inn med mysql fra p1kro01:

mysql -u skeivtarkiv_test -h mariadb.app.uib.no -pHeMmElIGPaSsOrD skeivtarkiv_test

Dersom andre klienter skal kople til, så må det legges til spesifikt IP adresse i ingress i Nrec openstack.

2FA i phpMyAdmin

Jeg har aktivert 2FA i phpMyAdmin på mariadb.app.uib.no. For å få dette til måtte jeg gjøre:

mysql -u root -p < /usr/share/phpMyAdmin/sql/create_tables.sql

Lage bruker:

CREATE USER 'pma_user'@'localhost' IDENTIFIED BY 'pma_password';
GRANT ALL PRIVILEGES ON phpmyadmin.* TO 'pma_user'@'localhost';
FLUSH PRIVILEGES;

og disse må legges til config.inc.php

/* phpMyAdmin configuration storage settings */
$cfg['Servers'][$i]['controlhost'] = 'localhost'; // Change if phpMyAdmin is on a different host
$cfg['Servers'][$i]['controluser'] = 'pma_user';
$cfg['Servers'][$i]['controlpass'] = 'pma_password';
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
$cfg['Servers'][$i]['relation'] = 'pma__relation';
$cfg['Servers'][$i]['table_info'] = 'pma__table_info';
$cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'pma__column_info';
$cfg['Servers'][$i]['history'] = 'pma__history';
$cfg['Servers'][$i]['recent'] = 'pma__recent';
$cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
$cfg['Servers'][$i]['tracking'] = 'pma__tracking';
$cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
$cfg['Servers'][$i]['users'] = 'pma__users';
$cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';
$cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding';
$cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches';
$cfg['Servers'][$i]['central_columns'] = 'pma__central_columns';
$cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings';
$cfg['Servers'][$i]['export_templates'] = 'pma__export_templates';

Deretter gå til Settings - Two factor authentication

og så scanne QR koden

Oppdatere cache i it.uib.no

Script kjører via:

/home/helgeo/CreateCache-it.uib.no

Den kjører i 30 minutter, max 5 sekunder per GET request. Det trigger Mediawiki koden i IThjelp til å generere en tilfeldig side. Når det gjøres, så lagres html koden i en lokal cache som da fungerer som html cache for neste besøkende. Cache'en bygges opp her på p1kro01:

/var/www/app/wiki/sites/ithjelp/code/cache

Scriptet er nokså enkelt:

#!/bin/bash

# Define the URL and the duration for the loop
url="https://it.uib.no/Spesial:Tilfeldig"
duration=$((30 * 60))  # 30 minutes in seconds
interval=5  # Interval in seconds

# Get the current time and set an end time for the loop
end_time=$(( $(date +%s) + duration ))

# Loop and send requests
while [ $(date +%s) -lt $end_time ]; do
    wget -q -O /dev/null "$url"  # Send the request without saving the output
    sleep $interval  # Wait for the next interval
done

Målet? Å få kjappe nettsider på it.uib.no

Sikkerhets gjennomgang Mediawiki - stikkord

  • stramme inn spesialsider
  • sjekk suid
  • root squash
  • cyclone
  • rydde i ldap gruppene
  • defender
  • shodan.io
  • brannmur iptebles ut
  • vmware disconnect nettverkskort
Official wiki for friByte 🌱. Contribute to fribyte-code/wiki development by creating an account on GitHub.

Extensions aktivert for Wiki'ene ved UiB (Wikhost):

wfLoadExtension( 'ParserFunctions' );
wfLoadExtension( 'VisualEditor' );
wfLoadExtension( 'SimpleMathJax' );
wfLoadExtension( 'InputBox' );
wfLoadExtension( 'Cite' );
wfLoadExtension( 'Widgets' );
wfLoadExtension( 'PageForms' );

Mediawiki Mediawiki : Security vulnerabilities, CVEs

Security vulnerabilities of Mediawiki Mediawiki : List of vulnerabilities affecting any version of this product:

TSM restore av en katalog til en ny katalog

dsmc restore "/var/www/sites/skeivtarkiv/*" "/var/www/sites/TMP4/" -pick -ina -sub=yes

Etter restoren kan en flytte Prod katalog til navn-feil, og så bruke mv for å flytte inn katalogen som er restoret fra TSM

PHP ytelse

Hint:

  • opcache (yum install for hver php8X-php-fpm)

Klient caching av diverse filer css, js, bilder osv

<IfModule mod_expires.c>
  ExpiresActive On

  # Set default expiration time
  ExpiresDefault "access plus 1 hour"

  # Set expiration times for specific file types
  ExpiresByType text/css "access plus 1 week"
  ExpiresByType application/javascript "access plus 1 week"
  ExpiresByType image/jpeg "access plus 1 month"
  ExpiresByType image/png "access plus 1 month"
  ExpiresByType image/gif "access plus 1 month"
  ExpiresByType image/webp "access plus 1 month"
  ExpiresByType application/font-woff2 "access plus 1 year"
  ExpiresByType application/font-woff "access plus 1 year"
  ExpiresByType font/woff2 "access plus 1 year"
  ExpiresByType font/woff "access plus 1 year"
  ExpiresByType application/x-font-ttf "access plus 1 year"
  ExpiresByType font/ttf "access plus 1 year"
  ExpiresByType font/otf "access plus 1 year"
</IfModule>

<IfModule mod_headers.c>
  # Set Cache-Control headers for caching static assets
  <FilesMatch "\.(css|js|woff|woff2|ttf|otf|png|jpg|jpeg|gif|svg|webp)$">
    Header set Cache-Control "public, max-age=31536000, immutable"
  </FilesMatch>

  <FilesMatch "\.(html|htm)$">
    Header set Cache-Control "private, max-age=86400"
  </FilesMatch>
</IfModule>

<IfModule mod_deflate.c>
  # Enable GZIP compression for text-based files
  AddOutputFilterByType DEFLATE text/html text/css application/javascript application/json text/xml application/xml application/xhtml+xml application/rss+xml font/woff2 font/woff
</IfModule>

IRT - Incident Response Team

Samhandlingskanalen:

Forsøk på å estimere ant. timer per oppgave per uke i 2025 (Under arbeid, og foreløpig estimert)

Oppgave i 2025 Timer per uke
Kubernetes 5
Møter 2
Wikihost 3 (drift, forvaltning, oppgradering)
Skjemaker 4 (drift, forvaltning, oppgradering)
WordPress 4 (drift, forvaltning, oppgradering)
Webhotell (Egendriftet Løsning, under avvikling) (Skeivtarkiv, vis.uib.no, turspor, folk, org, m.m.) 2
Red Hat 8 avvikling 0
Grind (Kringom) 0.5
Umjubileum ustillings server/app 0.5
Egenutvikling (docker, kubernetes, kurs m.m) 3
Bash og PHP-utvikling (drift og forvaltning) 1
Støtte til W3-kurs og w3-staging servere 0
Turing-server i Dikult kurser 0.5
Apache Apex Reverse-proxy 0
Generell brukerstøtte (svare på saker, tilganger, feilsøking, oppretting osv: Skjemaker, Regelsamlingen, WordPress, MediaWiki, filer.uib.no osv) 8
Heldagssamlinger 1
Prating og diskusjoner 2
Støtte for Regelsamlingen 0.5
Sprint/workshops 1
IT-sikkerhetsarbeid (utbedringer i webserver config, IP-filtrering, søk i logger, m.m.) 2

Estimert ca 38 timer per uke

Forsøk på å estimere ant. timer per oppgave per uke i 2024

Jeg har forsøkt å beregne hvor mye tid jeg bruker på ulike oppgaver per uke. Jeg jobber selvfølgelig ikke med alt dette i løpet av en uke, f.eks Wikihost oppgaver er gjerne oppgraderingsarbeid, og det gjør jeg i mine egne "sprinter" vanligvis 2-3 ganger i året, og det tar estimert rundt 4-6 uker totalt. Ut fra et slik estimat, så har jeg beregnet dette ned til antall timer per uke basert på at vi har 226 arbeidsdager i året. Listen hadde kanskje vært mer forståelig om fordelingen hadde blitt gjort med antall dager og uker per oppgave.

Oppgave i 2024 Timer per uke
Møter 3.5
Wikihost 3 (drift, forvaltning, oppgradering)
Skjemaker 4 (drift, forvaltning, oppgradering)
WordPress 4 (drift, forvaltning, oppgradering)
Webhotell (Egendriftet Løsning, under avvikling) (Skeivtarkiv, vis.uib.no, turspor, folk, org, m.m.) 3
Red Hat 7 avvikling 3
Grind (Kringom) 1 time per uke (vil estimere rundt 3 uker i året på denne oppgaven, alt fra epost, feilsøking, tilganger osv)
Egenutvikling (docker, kubernetes, kurs m.m) 2-3
Bash og PHP-utvikling (drift og forvaltning) 2-3
Støtte til W3-kurs og w3-staging servere 1 (det arbeidet jeg gjorde for KA)
Turing-server i Dikult kurser 0.5 (inkludert overgang fra Redhat 7 til 8)
Apache Apex Reverse-proxy 0.5 (inkludert overgang fra Redhat 7 til 8)
Generell brukerstøtte (svare på saker, tilganger, feilsøking, oppretting osv: Skjemaker, WordPress, MediaWiki, filer.uib.no osv) 6
Heldagssamlinger 1
Prating og diskusjoner 2
Støtte for Regelsamlingen 0.5
Sprint/workshops 0.5
IT-sikkerhetsarbeid (utbedringer i webserver config, IP-filtrering, søk i logger, m.m.) 2

Og her er dataene med dager og uker per år:

Oppgave Dager/år (lav-høy) Uker/år (lav-høy)
Møter 21 3
Wikihost (drift, forvaltning, oppgradering) 20 4
Skjemaker (drift, forvaltning, oppgradering) 20 4
WordPress (drift, forvaltning, oppgradering) 25 5
Webhotell (Egendriftet løsning, under avvikling) 18 3
Red Hat 7 avvikling 18 3
Grind (Kringom) 4-5 1
Egenutvikling (docker, kubernetes, kurs m.m) 15 3
Bash og PHP-utvikling (drift og forvaltning) 15 3
Støtte til W3-kurs og w3-staging servere 6 1
Turing-server i Dikult kurser 3 1/2
Apache Apex Reverse-proxy 3 1/2
Generell brukerstøtte (svare på saker, tilganger, feilsøking, osv.) 35 7
Heldagssamlinger 4 1
Prating og diskusjoner 6 1
Støtte for Regelsamlingen 3 1/2
Sprint/workshops 5 1
IT-sikkerhetsarbeid (utbedringer, logging, osv.) 15 3

Uformell addering:

(237 dager, 45 uker) på et arbeidsår 226 dager, 45 uker

Tips for Linux videoer

  • Sende epost med en annen avsender
  • Lage første index.html fil
  • while loop
  • for loop (for i in $(cat fil); do echo $i; done)

Brukar:Mihho/RAIL-INTRO-DAG-1

Brukar:Mihho/RAIL_INTRO_DAG_2_-_TEMA_HEMMELIGHET_PULL_SECRET

Brukar:Mihho/Kubernetes_RAIL_intro_dag_3_Prodsetting_av_Shared_App

Brukar:Mihho/Kubernetes-kurs-dag1-intro

Brukar:Mihho/Kubernetes-kurs-dag1-etter-lunsj

Brukar:Mihho/Kubernetes-kurs-dag2

Brukar:Mihho/Kubernetes-kurs-dag3

minikube

Minikube is ideal for experimentation, small-scale testing, and learning Kubernetes without the need for complex setups, making it a great tool for developers.

Overvåke størrelsen til en fil

watch -n 1 du -h /path/to/fila

Sette opp PHP remi 8.3

sudo dnf module reset php
sudo dnf module enable php:remi-8.3

og så:

sudo dnf install php

Logge inn på Kubernetes RAIL boks

Opprett .ssh/config:

Host rail-osl1-test
    #HostName login-01.osl1.test.rail.uhdc.no
    HostName login-03.osl1.test.rail.uhdc.no
    User helgeo
    LocalForward 23008 localhost:23008
Host rail-bgo1-test
    #HostName login-01.bgo1.test.rail.uhdc.no
    HostName login-03.bgo1.test.rail.uhdc.no
    User helgeo
    LocalForward 22008 localhost:22008
Host *
    ServerAliveInterval 30
    ServerAliveCountMax 100

Deretter:

ssh rail-bgo1-test

og så:

kubectl get pods

Ninja triks:

kubectl hns tree adm-it-pub

som da gir ut:

adm-it-pub
├── [s] adm-it-pub-profile
└── [s] adm-it-pub-shared

Og videre:

ssh rail-bgo1-test
minikube tunnel
ssh rail-bgo1-test
minikube dashboard
ssh -L 8001:127.0.0.1:46397 helgeo@rail-bgo1-test

og så

http://127.0.0.1:8001/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/#/daemonset?namespace=default

Finn månedsbackup filer av Skjemaker

Hver måned så blir det lagret en kopi av Skjemaker databasen. For å finne disse backupene blant alle de andre .sql.gz filene, så kan en kjøre følgende find kommando:

find . -regextype posix-extended -iregex '.*/skjemaker[0-9].*\.(January|February|March|April|May|June|July|August|September|October|November|December)\.sql\.gz'

som da vil gi ut:

./skjemaker19.February.sql.gz
./skjemaker19.March.sql.gz
./skjemaker19.December.sql.gz
./skjemaker19.April.sql.gz
./skjemaker19.May.sql.gz
./skjemaker19.January.sql.gz
./skjemaker21.September.sql.gz
./skjemaker21.July.sql.gz
./skjemaker21.August.sql.gz
./skjemaker21.October.sql.gz

Dersom en er interessert i få filer som har en årsdato i seg, og hvor mye GB dette kan totalt være, så kan en kjøre:

find /backup -type f -regextype posix-extended -regex '.*/.*(2019|202[0-9]).*\.sql\.gz' -exec du -ch {} + | grep total

Hurtignotater fra gitlablab kurset

Bruk curl til å finne return koden fra et nettsted

curl -o /dev/null -s -w "%{http_code}\n" -k https://helge.w.uib.no

gir da typisk ut:

200

Gamle deny/allow from Apache 2.2 regler i nyere Apache 2.4

Om en har eldre Apache 2.2 kode som skal flyttes til Apache 2.4, så vil aksess regler som deny/allow slutte å virke. En kan få de til å virke også i Apache 2.4 ved å aktivere følgende apache module:

mod_access_compat.so

En kan bruke VLC til å gjøre store .avi filer mindre

Media -> gjør om /lagre -> Legg til fil (legg til avi filen) -> Konvert/lagre -> Velg profil (Video for Youtube HD) -> Mål-Bla gjennom -> start

Om du har store .avi filer, så kan du bruke ffmpeg for å gjøre de mindre og samtidig konvertere de til et annet format

Her er 3 eksempler:

for file in *.avi; do
   ffmpeg -i "$file" -vcodec libx264 -crf 23 -preset fast -acodec aac -b:a 192k -ar 44100 -shortest "${file%.avi}_final.mp4"
done
for file in *.avi; do
   ffmpeg -i "$file" -vcodec libx264 -crf 23 -preset fast -acodec aac -b:a 192k -shortest "${file%.avi}_compressed.mp4"
done
for file in *.avi; do
   ffmpeg -i "$file" -vcodec libx264 -crf 25 -preset fast -acodec aac -b:a 128k "${file%.avi}_compressed.mp4"
done

Søk gjennom filer etter spesifikke ord

grep --color=always -Hn "password" *.txt

Ordet "password" blir highlightet og filnavnet samt linjenummer blir skrevet ut.

Blir du ofte logget ut av phpMyAdmin?

Dette kan være løsningen. Legg til:

$cfg['LoginCookieValidity'] = 86400;

i config.inc.php fila. Les her:

Det er mulig at disse også må endres i php.ini fila:

session.gc_maxlifetime = 1800  ;  // Default is 1440 seconds (24 minutes)
session.cookie_lifetime = 1800 ;  // Also 30 minutes

Og husk at også disse innstillingene i apache confen kan ha betydning:

Timeout 300
ProxyTimeout 300

Wordpress w.uib.no i en docker container?

For å importere databasen:

docker exec -i hello-world-mysql-wordpress mysql -u root -pHabaHaba wordpress < wordpressblog04.20240917.sql

Teste boks for Fastapi python applikasjonen?

Har satt opp denne:

ssh -i .ssh/id_rsa rocky@158.39.77.73

i adm-it-pub Prod NREC, så den er klar for Prodsetting av: Web:

sshuttle mot jumphost

sshuttle -l 0.0.0.0 -x 172.0.0.0/8 -v -r mihho@p1publogin 129.177.0.0/16

Docker cron jobber?

Mulig løsning som må testes ut:

FROM php:8.0-apache

# Install cron and any other dependencies
RUN apt-get update && apt-get install -y cron

# Add your crontab file to the container
COPY crontab /etc/cron.d/your-crontab-file

# Apply cron job permissions
RUN chmod 0644 /etc/cron.d/your-crontab-file

# Start cron service and Apache
CMD ["cron", "-f"] && apache2-foreground

Mysql dump bash script

#!/bin/bash
mysqlcheck -u root --auto-repair --check --all-databases &> /backup/helge/autorepairloggen.$(date -I)

DATOTID=$(date +%Y-%m-%d:%T)
MAANED=$(date +%B)
DAG=$(date +%d)
AAR=$(date +'%Y')

LISTA=`find /var/lib/mysql/ -maxdepth 1 -type d | awk -F '/' '{print $5}' | sort | uniq | sed '/^$/d'`

for i in $LISTA; do echo "cd /backup/helge; mysqldump --lock-tables=false $i  > /backup/helge/$i.$DATOTID.sql"; done > /backup/helge/runme.sh
echo "cd /backup/helge/; gzip *.sql" >> /backup/helge/runme.sh

# Månedsbackup. Dersom gitt dagsnummer, kopier dump fil til månedens fil
if [ $DAG = "09" ]; then
  for i in $LISTA; do echo "mv /backup/helge/$i.$DATOTID.sql.gz /backup/helge/$i.$AAR.$MAANED.sql.gz"; done >> /backup/helge/runme.sh
fi

# kjoerbart script
chmod 755 /backup/helge/runme.sh

# Kjør backup
/backup/helge/runme.sh

# til slutt ta vare på kommandoene i en git log
cd /backup/helge/
git commit -m "runme.sh: db-backup kommandoene" runme.sh
exit;

Fjerne alt og begynne på nytt i docker

docker stop $(docker ps -aq)
docker rm $(docker ps -aq)
docker rmi $(docker images -q)
docker volume rm $(docker volume ls -q)
docker network rm $(docker network ls -q)
docker system prune -a --volumes

docker build error?

Mulig løsning:

docker builder prune --all

Glemt passord i en wiki?

og en får følgende melding:

Error: You are using an unsupported PHP version (PHP 7.4.33).
MediaWiki 1.42 needs PHP 8.1.0 or higher.

Løsning:

/opt/remi/php81/root/bin/php changePassword.php

Skeivtarkiv Test i en docker container?

Foreløpig test:

ssh d1helge01
cd /local/helge/skeivtarkiv/
docker-compose up

og så gå til:

GD mangler, feiler med:

failed to solve: process "/bin/sh -c docker-php-ext-install gd" did not complete successfully: exit code: 1

Få en engangsinnlogging til Skeivtarkiv i docker Test

ssh helgeo@d1helge01
cd /local/helge/skeivtarkiv
docker exec -it skeivtarkiv /bin/bash
vendor/bin/drush uli

Da får en typisk ut:

denne limer en inn i nettleseren og så er en innlogget som admin :-)

Skeivtarkiv Drupal bak reverse proxy

En opplever mixed content problem, og da vises ingen bilder f.eks. En løsning kan da være å legge til i settings.php fila (her er p1kro01 reverse-proxy):

$conf['reverse_proxy'] = TRUE;
$base_url = 'https://skeivtarkiv.test.uib.no';
$conf['reverse_proxy_addresses'] = array('129.177.6.149');
$conf['reverse_proxy_header'] = 'HTTP_X_FORWARDED_FOR';

Fra:

Fjerne error reporting til nettleseren i en docker container

I forsøket med å få Skjemaker opp i en docker, så kom det hver gang en deprecated melding ut på nettleseren. For å unngå denne feilmeldingen så la jeg til følgende i Dockerfile'en, og da forsvant meldingen:

# Rename php.ini-production to php.ini
RUN mv /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini

# Concatenate custom configurations to php.ini and php.ini-production
RUN echo "memory_limit = 256M" >> /usr/local/etc/php/php.ini && \
    echo "max_execution_time = 300" >> /usr/local/etc/php/php.ini && \
    echo "max_input_time = 600" >> /usr/local/etc/php/php.ini && \
    echo "upload_max_filesize = 20M" >> /usr/local/etc/php/php.ini && \
    echo "post_max_size = 40M" >> /usr/local/etc/php/php.ini && \
    echo "error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED" >> /usr/local/etc/php/
php.ini

Skjemaker som docker i Test

er en reverse proxy mot en testinstallasjon av Machform som en docker container. Selve test applikasjonen kjører på Helge sin grisleboks (grisle: https://ordbokene.no/nno/bm/%C3%A5%20grisle):

  • d1helge01

Planen er å ikke realisere Test installasjoner på Redhat/Rocky bokser lenger, men kun som docker kontainere. Målet er å få driftserfaring med docker.

Får å kople til phpmyadmin:

phpMyAdmin i Skjemaker docker Test'en: https://skjemaker.test.uib.no/phpmyadmin/

NB: det er ip basert begrensning. Dersom en skal hvitliste en ip så må dette legges inn i skjemaker.test.uib.no.conf vhost filen.

For at en skal kjøre en upgrade.php så må data katalogen være eid av apache prosessen. Det gjøres enklest ved å:

docker exec -it skjemaker-docker-instans /bin/bash
chown -R www-data data

En må også huske å gå til:

og endre Machform URL til:

  • skjemaker.test.uib.no

Importere skjemaker.sql inn i en mysql docker container

docker exec -i skjemaker22-docker-container mysql -u root -ptest1234 skjemaker22-database < skjemaker.sql

Dumpe mysql data fra en mysql docker container

Kladd:

docker exec <mysql_container_name> mysqldump --single-transaction --quick --max_allowed_packet=1M -u root -p database_name > backup.sql

Validering mot ldaps virker ikke fra en docker container

Dersom en ikke greier å validere mot ldap.uib.no:636 fra en docker container (typisk en PHP application), så kan følgende løsning være å putte denne setningen inn i Dockerfile'n:

# ldaps
RUN mkdir /etc/ldap/ && \
echo 'TLS_REQCERT allow' >> /etc/ldap/ldap.conf

Fra:

Installere htmldoc på Redhat

yum install snapd
systemctl enable --now snapd.socket
ln -s /var/lib/snapd/snap /snap
systemctl start snapd
snap install htmldoc

For liten /tmp katalog?

Om en kjører en kommando som bruker /tmp til mellomlagring og /tmp går full, så kan du løse dette ved å bruke en annen disk som har mer plass. Dette gjøres ved å sette:

export TMPDIR=/var/www/nytmpdisk/

hvor nytmpdisk er en katalog i disken /var/www som da er større enn /tmp disken.

Her er et eksempel:

df -kh

gir ut:

Filesystem                                                    Size  Used Avail Use% Mounted on
/dev/mapper/vg_local-lv_tmp                                  1014M   40M  975M   4% /tmp
/dev/mapper/vg_sata-lv_www                                    359G  291G   69G  81% /var/www

Her kan en se at på /var/www har en 69GB ledig, mens i /tmp er det kun 975M ledig.

Logg fylles opp veldig fort i din PHP applikasjon?

Har hatt en Drupal hvor watchdog tabellen økte noe voldsomt, som igjen gjorde at dump filen ble til slutt 126GB og så ble disken full. En mulig løsning kan være å legge inn følgende i settings.php fila:

error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);

som da sier til PHP at alt unntatt 'notice' og 'warning' meldinger skal logges. Da det var notice og warning meldinger som flooded tabellen, så løste det problemet.

Hvilken PHP versjon kjører nettstedet?

wget --server-response --spider --tries=1 --timeout=3 https://skjemaker.app.uib.no 2>&1 | grep X-Powered-By

gir:

 X-Powered-By: PHP/8.3.9

Men, husk at webserveren bestemmer selv om slik informasjon skal gis ut. Om en setter:

expose_php = Off

så forhindrer en at PHP versjonsnummeret blir gitt ut. Noe som er anbefalt.

mysqlcheck for MariaDB

I noen tilfeller bør en unngå kjøre mysqlcheck mot hele MariaDB. Har opplevd at det stopper hele greia. Kanskje bedre å ta database for database, og da gjerne spredt utover uken. Her er i alle fall syntaksen:

mysqlcheck -u [username] -p --optimize --auto-repair [database_name]

Oppdatere regler.app.uib.no

ssh helgeo@p1kro01
cd regler.app.uib.no
git pull
git log

Gjør evt. endringer

git push

Sjekk:

phpMyadmin for skjemaker.app.uib.no

Skjemaker tjenesten som egentlig heter Machform har en MariaDB database. Dersom en trenger tilgang til Skjemaker databasen så må en gjøre følgende:

ssh navnekonto@p1skjemaker04
sudo -i
cd /etc/httpd/conf.d
git mv phpmyadmin.conf.OFF phpmyadmin.conf
service httpd reload

og når en er ferdig:

git mv phpmyadmin.conf phpmyadmin.conf.OFF
service httpd reload

Hvilken tabell er den største?

Om du har en stor MariaDB database og du lurer på hvilken tabell som er den største, så kan du kjøre følgende sql statement:

SELECT table_schema AS "Database",
       table_name AS "Table",
       ROUND((data_length + index_length) / 1024 / 1024, 2) AS "Size (MB)"
FROM information_schema.TABLES
WHERE table_schema = 'your_database_name'
ORDER BY (data_length + index_length) DESC;

Nettsider og php versjoner

De fleste nettsidene under er prøvd med nyere versjon av PHP. I en del tilfeller så krasjer enten webapplikasjonen eller en eller annen plugin/innstikk/extension. Dermed befinner applikasjonen seg fortsatt på 7.4 da nyere versjon ikke fungerer. I de tilfellene det har fungert å oppgradere PHP versjonen, så er de flyttet til den høyeste 8.x versjonen som har vist seg å fungere med applikasjonen.

Nettside/domene PHP versjon Kommentar Status Dato
https://registrering.uib.no/proforma/ 8.2 https://ntk.app.uib.no/TJ0736 Ok
https://www.universitetsmuseet.no/nb 8.1 I følge https://whatcms.org/ så er Drupal versjonen på 9.2. Kan noen verifisere dette? Mike jobber med saken
https://grind.no 7.2 Egendriftet løsning? Avtale? Den skal avvikles 2. desember AVVIKLET!
https://kursserver.k.uib.no/ 8.2 UiB kursserver for Dikult kurser Daniel Jung OK
Multisite Wordpress (470 nettsteder) .w.uib.no 8.3 Flere plugins som ikke var kompatible med PHP 8.3 er avviklet Ok! Done :-) 17. oktober 2024. Ferdigstilt!
Wikihost (ca 60 stk) bl.a it.uib.no/itwiki.uib.no 7.4 og 8.0 PHP >= 8.1 versjon gjør at ldap modulen ikke fungerer. ER NÅ LØST! Planlegger innføring SimpleSaml og oppgradering. Avvikling av de som ikke har gitt tilbakemelding etter epost utsendelse.

MFA MOT ITWIKI ER PÅ GANG!

ALLE WIKIENE ER OPPGRADERT TIL PHP 8.3!
Diverse nettsteder på Egendriftet Løsning (se under) Planen er å avvikle de som ikke kan oppgraderes eller sikre de med å flytte til Docker eller å legge en Web Application Firewall (WAF) foran FERDIGSTILT! DONE!
https://vis.uib.no 8.2 Ok DONE!
https://birkeland.uib.no 8.3 Ok DONE!
https://bio.uib.no/te/ 8.3 Ok DONE!
https://booking2.h.uib.no 8.1 Sikret med ip kontroll og htpasswd PHP versjon ok enn så lenge. Selve applikasjonen er utdatert AVVIKLET!
https://btrc.h.uib.no 7.4 Sikret med ip kontroll og htpasswd. Men PHP kode er gammel og ikke vedlikeholdt Stenges ned desember 2024. Eier er varslet AVVIKLET!
https://corviz.h.uib.no 8.3 Ok DONE!
https://discretion.uib.no 8.3 2 plugins er avviklet OK! DONE!
https://dna.h.uib.no 8.3 Done! Virker i følge eier Ok :) DONE!
https://emid.h.uib.no 8.2 Ok DONE!
https://expearth.uib.no 8.3 Quiz'en knekker Avventer. Kan den avvikles? OPPGRADERT PHP 8.3!
https://skjemaker.app.uib.no 8.3.8 Appnitro Machform støtter PHP 8.3 versjonen Ny versjon 22 Prodsatt. Ok! :-) DONE!
https://katalog.skeivtarkiv.no 7.4 Bruker en funksjon som forsvinner når php > 7.4. Usikker på når dette blir fikset. Venter på nettsteds-eier UB REMI PHP 7.4 ER AKTIVERT!
https://mso.uib.no/ 8.3 Tester med nettstedeier. Drupal core versjon ukjent De har fått utsettelse. Planlagt flytting til Fribyte OPPGRADERT PHP 8.3!
https://nmr.uib.no/ 7.4 Vurderes avviklet/flyttet til www.uib.no. Gammel Joomla versjon, upatchet og ikke oppgradert. Avviklet! Mulig flytting til www.uib.no AVVIKLET!
https://skeivtarkiv.no/ 7.4 Ser ut til å virke med PHP 8.2 i Test-teste Docker versjon Klar til oppgradering av PHP til 8.3, evt. 8.2, venter på klarsignal REMI PHP 7.4 ER AKTIVERT!
https://solli.h.uib.no/ 8.2 Done! Virker i følge eier Ok OPPGRADERT PHP 8.3!
https://turspor.h.uib.no 8.3 Plugins krasjer Oppgradert! Venter på svar OPPGRADERT PHP 8.3!

SimpleSaml Azure AD og Mediawiki

Bash script for å lage eposter til typisk nettstedseiere

Kan være nyttig når en skal aktivt varsle nettstedseiere og andre via epost.

Folk og Org drifts-scripts

Nå som Radisson7 blir slått av, så er gamle root scripts lagt her:

  • p1kro01.uib.no:/root/scripts/radisson7-scripts

Disse scriptene er i hovedsak brukt til å hente ut brukerinfo, sende epost til Folk og Org brukerne osv. Altså type forvaltning og avvikling.

PHP støtte for Oracle backend database: oci8

Vi fikk en problemstilling under

yum update

på p1record02.uib.no

Error: 
Problem 1: cannot install the best update candidate for package php82-php-oci8-8.2.21-1.el8.remi.x86_64
  - nothing provides libclntsh.so.23.1()(64bit) needed by php82-php-oci8-8.2.28-1.el8.remi.x86_64 from remi-safe

Løsningen:

rpm -e oracle-instantclient-basic
wget https://download.oracle.com/otn_software/linux/instantclient/2380000/oracle-instantclient-basic-23.8.0.25.04-1.el9.x86_64.rpm
sudo rpm -Uvh oracle-instantclient-basic-23.8.0.25.04-1.el9.x86_64.rpm

verifiser at pakken er kommet inn:

find /usr/lib/oracle/ -name libclntsh.so.23.1
sudo dnf update php82-php-oci8

Da kommer de andre oppdaterte pakkene inn også.

Deretter:

service php82-php-fpm restart
service httpd restart

Bruk opsjonen status for å sjekke at de faktisk kjører.

done.

Se sak:

som da beskriver problemstilling med å få Oracle støtte i PHP på en Linux Rhel8/Rocky8.

Og se også gjerne eldre artikkel: Php oci install rhel5

Om en prøver:

dnf install php82-php-oci8

og får:

Last metadata expiration check: 3:30:38 ago on Tue 04 Jun 2024 07:42:38 AM CEST.
Error: 
 Problem: cannot install the best candidate for the job
  - nothing provides libclntsh.so.21.1()(64bit) needed by php82-php-oci8-8.2.19-1.el8.remi.x86_64 from remi-safe
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

så kan dette være løsningen:

Først:

wget https://download.oracle.com/otn_software/linux/instantclient/2114000/oracle-instantclient-basic-21.14.0.0.0-1.el8.x86_64.rpm

Deretter:

rpm -i oracle-instantclient-basic-21.14.0.0.0-1.el8.x86_64.rpm

og så skal denne fungere:

yum install php82-php-oci8

Deretter sjekk med f.eks:

<?php
phpinfo();
?>

som bør da gi ut:

OCI8 Support 	enabled

Skrive ut postgresql resultat til fil

Logg inn:

psql

Deretter:

\o out.txt

Og så f.eks:

\dt

Logg ut:

\q

Og vips:

cat out.txt
-)

Redmine i docker

Dockerfil og docker-compose for Redmine

Kommer...

Endre Redmine admin passord

Logg inn på docker container:

docker exec -it redmine bash

deretter:

RAILS_ENV=production bundle exec rails c

Deretter i konsollet:

user = User.where(login: 'admin').first
user.password = 'NytTPasSorD'
exit!

Nå skal en kunne logge inn via:

https://localhost:3000

Binær dump og restore i Postgresql

Dersom en dumper og restorer med binær data så går alt mye mye fortere. Anbefales.

For å dumpe, eksempelvis:

pg_dump -C -Fc database > database-dag-tid.dump

Og så restore:

pg_restore -d juradm database-dag-tid.dump

WordPress/custom-notification.php

Text felt vises ikke når en skal lage ny artikkel i Drupal w3-kurs.test.uib.no

<htmlet>panopto-helge-1</htmlet>

Cytomine instans i NREC

NB: Katalogen /var/lib/docker blir fort veldig stor. Derfor må en passe på å enten lage en symlenke eller eget volum for denne, ellers blir / disken full på null komma niks.

ssh -i .ssh/cytomine ubuntu@158.39.200.169

Er domenenavnet en webserver?

SSL sertifikat i Nginx

Om en legger inn nye referanser til cert og key i ssl.inc fila, husk semikolon!

ssl_certificate      /etc/letsencrypt/live/w3-prestaging.test.uib.no-0001/fullchain.pem;
ssl_certificate_key  /etc/letsencrypt/live/w3-prestaging.test.uib.no-0001/privkey.pem;

Det er fort gjort å glemme semikolonnet på slutten, særlig om en klipper og limer fra letsencrypt teksten.

W3 kurs / staging

Lage ny midlertidig bruker for w3-staging.test.uib.no

ssh t1w3app02
sudo -i
su - w3-drupal
cd /var/www/w3.uib.no
bin/site-drush uli

Da får en en url som er på formen:

http://w3.uib.no/en/user/reset/1/1712304497/8lmC7KE9H6a_ZFYvM4o8DwxjanNNC57b7v5t9iyFUg8/login

Erstatt domenenavnet med:

w3-staging.test.uib.no

og lim inn lenken i nettleseren. Vipps så er en innlogget.

En kan også lage en innloggingslenke på vegne av en annen bruker:

ssh markus@t1w3app02
sudo -i
su - w3-drupal
cd /var/www/w3-kurs.test.uib.no
bin/site-drush uli mpi067

Dumpe postgres database på t1w3app02

pg_dump -C -Fc -h t_w3_stageing.pg.uib.no -U t_w3_stageing_admin -d t_w3_stageing > t_w3_stageing.dump

Resette staging

./cron-stage-w3-staging --yes

Kladd:

ssh helgeo@t1w3app02
sudo -i
su - w3-drupal

Interessante bash scripts som vi ser på nå ligger i:

/home/w3-drupal

deriblant:

kurs.db.restore.sh

og deretter:

/home/w3-drupal/bin/synced/site-reset-staging-from-prod-branch

...

../vendor/bin/drush -l w3-prestaging.test.uib.no core:status
https://w3-prestaging.test.uib.no/en
tig --all
sudo su w3-drupal
pwd
/var/www/w3-prestaging.test.uib.no
git fetch --all --prune #prune sletter lokale brancher
gti status
git reset --hard origin/master 
git submodule update

AWS Lightsail

Møte AWS

  • Endre Syrdalen, esyrdale@amazon.es
  • Maria Rantalaiho (Finland)

Postgresql i Lightsail

Gå til:

Trykk på databases - create database

Deretter får en detaljer som brukernavn, passord osv

Her er eksempel deretter på oppkopling:

psql -U dbmasteruser -h ls-37dd6e42c404a78e82a4bffbebe4139395b9a9ce.cjaio6uoqytv.eu-north-1.rds.amazonaws.com -d postgres -W

Lag bruker:

createuser -U dbmasteruser -h ls-37dd6e42c404a78e82a4bffbebe4139395b9a9ce.cjaio6uoqytv.eu-north-1.rds.amazonaws.com -r -P -d test -W

Legg test brukeren til dbmasteruser, og sett eierskap:

GRANT test TO dbmasteruser;
CREATE DATABASE test OWNER = test;

Eller om en vil bruke createdb:

createdb -U dbmasteruser -h ls-37dd6e42c404a78e82a4bffbebe4139395b9a9ce.cjaio6uoqytv.eu-north-1.rds.amazonaws.com -O test test -W

Slette database:

dropdb -U dbmasteruser -h ls-37dd6e42c404a78e82a4bffbebe4139395b9a9ce.cjaio6uoqytv.eu-north-1.rds.amazonaws.com test -W

Importere en sql dump:

psql -U dbmasteruser -h ls-37dd6e42c404a78e82a4bffbebe4139395b9a9ce.cjaio6uoqytv.eu-north-1.rds.amazonaws.com test -W < dumpfila.sql

Ny kladd: Åpne en incognito fane, gå til:

aws.com

Så logg inn. Mer nyttig informasjon:

Fortløpende kladd:

Rackspace: mellomleverandør, gir også teknisk support
Forhandlet via SIKT.
Publisering - Test:
aws id: 835611770218
https://signing.aws.amazon.com
Søke etter Lightsail: lightsail.aws.amazone.com
Riktig veg å gå inn; myapplications.microsoft.com
LightsailPilot-WordPress-01
13.53.122.138 (public ip)

Som gikk så fint sist gang, men nå får jeg:

User: arn:aws:sts::448410102050:assumed-role/ita-app-developer/mihho@uib.no
Service: lightsail
Action: GetRegions
On resource(s): arn:aws:lightsail:eu-west-1:448410102050:*
Context: no identity-based policy allows the lightsail:GetRegions action

Løsningen var å åpne nettleseren i incognito modus :-)


Søke etter hjelp:

AWS KONTO

HelgeAWS
wordpress: user

aws lightsail wordpress

SSL på wordpress i AWS Lightsail bitnami

Kjør denne:

/opt/bitnami/bncert-tool

Nyttig tips?

endre php.ini verdier i aws lightsail wordpress instans

sudo -i 
nano -w /opt/bitnami/php/etc/php.ini
/opt/bitnami/ctlscript.sh restart apache

Ref:

Kople til aws server boks med SSH

ssh -i .ssh/aws.pem bitnami@13.53.122.138

Det kan se ut til at en må laste ned .pem fil for hvert Lightsail prosjekt en fyrer opp.

Wordpress user passordet ligger i filen:

bitnami_application_password

Om en har glemt privat nøkkelen så skal en finne den under Account Lightsail:

* https://lightsail.aws.amazon.com/ls/webapp/account/profile

Kople til mysql på aws server boks

mariadb -u bn_wordpress bitnami_wordpress -p

Passordet ligger i wp-config.php fila

Kople til phpmyadmin aws server

Start først en SSH tunnel:

ssh -i .ssh/aws.pem -L 8888:127.0.0.1:80 bitnami@AWS_SERVER_IP_ADDRESS

deretter:

https://localhost:8888/phpmyadmin

Tegnsett i vim

Om en opplever at æ,ø og å krøller seg til i editoren vim, så kan det hjelpe å legge inn følgende i .vimrc filen:

set fileencoding=utf-8
set encoding=utf-8
set termencoding=utf-8

Og i tillegg kan dette også være til hjelp:

export LANG=nn_NO.utf8

Installere siste Postgresql server på Linux Redhat 8

yum module info postgresql
yum module reset postgresql
yum module install postgresql:15/server
yum info postgresql-server

som da skal gi:

Version      : 15.5

Fra:

Deretter:

postgresql-setup initdb
systemctl enable postgresql
systemctl start postgresql

Åpne i iptables brannmur for psql client

Eksempel:

iptables -A INPUT -s 129.177.13.56/32 -p tcp -m multiport --dports 5432 -m comment --comment "010 allow postgres from t1w3app02" -j ACCEPT

Aksessere via nettleser mot postgresql server (PHP 8 relatert...)

yum install phpPgAdmin

Legg til ip adressen din:

nano -w phpPgAdmin.conf

i linje:

Require ip 129.177.xxx.yyy

Til slutt

service httpd restart

Men, koden trenger patcher. Hent først fork:

erstatt alle filene under:

/usr/share/phpPgAdmin

Deretter legg til patch:

Og sett følgende i phpPgAdmin sin config.inc.php fil /usr/share/phpPgAdmin/conf/config.inc.php:

$conf['servers'][0]['host'] = 'localhost';

I tillegg må en også antakelig ha følgende linje i pg_hba.conf filen:

host    all             all             129.177.xxx.yyy/32      md5

Hvor 129.177.xxx.yyy er din datamaskins IP adresse.

og deretter:

Lag postgresql bruker og database

Lag en read only bruker:

createuser -s -D -R -S wikireadonly

Deretter i psql:

alter role wikireadonly with password 'HgF54sdsfHlfjh';

Dersom brukeren skal ha lese tilgang:

\c itwiki
GRANT USAGE ON SCHEMA mediawiki to wikireadonly;
GRANT SELECT ON ALL TABLES IN SCHEMA mediawiki to wikireadonly;

Lag super bruker:

createuser -S -D -R -E itwiki
createdb -O itwiki itwiki

Deretter:

psql

og kjør:

alter role itwiki with password '************'

Endre eier av alle tabellene i en Postgresql database

Først må du finne alle tabellene. Det kan en gjøre med følgende sql:

select 'ALTER TABLE mediawiki.' || t.tablename || ' OWNER TO arkiwiki;' from  pg_tables t where t.tableowner != 'arkiwiki';

Databasen er altså "arkiwiki", og vi ønsker at postgresql bruker "arkiwiki" skal eie alle tabellene. Dette vil da gi ut alle sql statementene som du da kjører. Altså en lang liste med noe ala:

 ALTER TABLE mediawiki.iwlinks OWNER TO arkiwiki;
 ALTER TABLE mediawiki.job OWNER TO arkiwiki;
 ALTER TABLE mediawiki.l10n_cache OWNER TO arkiwiki;
 ALTER TABLE mediawiki.ldap_domains OWNER TO arkiwiki;
 ALTER TABLE mediawiki.log_search OWNER TO arkiwiki;
 ALTER TABLE mediawiki.logging OWNER TO arkiwiki;
 ALTER TABLE mediawiki.math OWNER TO arkiwiki;
 ALTER TABLE mediawiki.mediawiki_version OWNER TO arkiwiki;
 ALTER TABLE mediawiki.module_deps OWNER TO arkiwiki;
 ALTER TABLE mediawiki.ipblocks OWNER TO arkiwiki;

Tømme en cachetabell i postgresql (mediawiki relatert)

Når en kjører update.php så kan en ende opp i at oppgraderingsscriptet bailer ut pga feil i følgende tabell:

l10n_cache

Løsningen er å tømme denne tabellen, det gjør på følgende måte:

su - postgres
psql

og deretter:

truncate l10n_cache

og så kjøre update.php på nytt:

php maintanence/update.php

Dumpe all sider i en wiki til xml

En kan bruke innebygd mediawiki verktøy for å dumpe innhold til xml som igjen kan importeres i en annen wiki:

cd /var/www/sites/navnwiki/
php maintenance/dumpBackup.php --full --include-files --uploads > navnwiki.xml

og tilsvarende kan en importere xml filen:

php maintenance/importDump.php navnwiki.xml

Migrere data fra Postgresql til Mysql/Mariadb

Nyttig lesestoff:

En kan også eksportere sidene til xml filer, for deretter å importere de med:

php maintanance/importDump.php xmlfila.xml

Tilsvarende kan en også gjøre med bildene:

php maintanance/importImages.php bildekatalog/

Benytte Linux jumphost for å kople til interne porter (TOTP)

  1. Intern server: d1helge01.uib.no
  2. Jumphost: p1publogin.uib.no

Først må en legge til en personlig public key på itgit.app.uib.no. Hint:

ssh-keygen

Kopier id_rsa.pub til itgit.app.uib.no (preferences -> SSH keys -> add new key) Deretter:

ssh mihho@p1publogin.uib.no

Om du har passord på nøkkelen så må du oppgi dette her. For deg så er huskeregelen: ToksyMoksyDoksy Omorganiseringen Da får en opp et slikt vindu: NB: alle koder er endret fra de originale Og under stod det:

Your new secret key is: CI4KJJKLHKH435H3L5HKLDU
Enter code from app (-1 to skip):

Når jeg prøvde å scanne qr coden, så skjedde det ingenting i hverken ms authenticator appen eller google authenticator appen på telefonen min. Derfor valgte jeg:

-1

og fikk videre:

Your new secret key is: CI4KJJKLHKH435H3L5HKLDU
Enter code from app (-1 to skip): 373438
Code incorrect (correct code 234345). Try again.
Enter code from app (-1 to skip): -1
Code confirmation skipped
Your emergency scratch codes are:
  58134343
  72456456
  25345345
  56675675
  56356456

Jeg var da logget inn. Nå startet jeg sshuttle på min lokale maskin:

sshuttle -r mihho@p1publogin.uib.no 0/0

Første gang bruke jeg en av scratch kodene.

Og vips så kunne jeg aksessere intern port 8081 på d1helge01 fra lokal maskin via jumphosten p1publogin.

Deretter logget jeg ut av alt, stengte alle app'er på telefonen og gjentok sshuttle kommandoen.

Denne gang dukket p1publogin.uib.no på Google Authenticator appen og jeg kunne bruke koden fra denne til å logge inn på jumphosten p1publogin.uib.no

Deretter kunne jeg aksessere mine docker containere på d1helge01 i nettleseren min: Eksempelvis:

Docker tips

ERR_CONNECTION_REFUSED

Jeg får ERR_CONNECTION_REFUSED når jeg prøver å nå http://localhost mot min nye flotte docker container.

Om en er på VPN så kan det ha noe med lokal ruting å gjøre. En mulig løsninger er å starte containeren med --network host:

docker run -d --network host -p 8080:80 webapp1

ser ut til å fungere sammen med Cisco VPN

Hvor ligger php.ini filen i docker-containeren?

Logg inn på kontaineren:

docker exec -it skjemaker_php-apache_1 /bin/bash

deretter:

php -i | grep php.ini

Mulig template for en docker php:apache

RUN apt-get update -y && apt-get install -y \
        libpng12-dev \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        curl \
        libcurl4-openssl-dev \
        libxpm-dev \
        libvpx-dev \
    && docker-php-ext-configure gd \
    --with-freetype-dir=/usr/lib/x86_64-linux-gnu/ \
    --with-jpeg-dir=/usr/lib/x86_64-linux-gnu/ \
    --with-xpm-dir=/usr/lib/x86_64-linux-gnu/ \
    --with-vpx-dir=/usr/lib/x86_64-linux-gnu/ \
    && docker-php-ext-install \
        pdo \
        pdo_mysql \
        gd \
        curl \
    && a2enmod rewrite \
    && service apache2 restart

Eget utviklingsmiljø for docker

Fra egen maskin, start med:

sshuttle -r helgeo@d1helge01.uib.no 0/0

En kan også gå via jumphosten:

sshuttle -r mihho@p1publogin.uib.no 0/0

Deretter logg inn på d1helge01 og bli sudo:

ssh helgeo@d1helge01; sudo -i

Gå så til katalog:

cd /local/helge/prosjektnavn

hvor "prosjektnavn" er en av flere, f.eks skjemaker Sjekk om det allerede kjører docker containere:

docker stats

stopp evt. containere:

docker container stop container_id

For å starte prosjekt:

cd prosjektnavn; docker-compose build; docker-compose up -d

Deretter kan en åpne nettleseren og gå f.eks til:

http://d1helge01:80

eller for phpmyadmin typisk:

http://d1helge01:8081

Dersom i phpmyadmin blir spurt om servernavn, så er det navnet på containeren, altså:

mysql

Docker Helloworld itgit.app.uib.no

For å teste imaget lokalt, så kan en hente ned ferdig laget image fra itgit.app.uib.no med følgende:

docker login -u Helge.Opedal -p "$(cat token)" itgit.app.uib.no:4567

hvor "token" er en fil som inneholder en Personal Access Token. Deretter kan en hente ned docker imaget:

docker pull itgit.app.uib.no:4567/helge.opedal/helloworld:test

En skal da få den opp i listen:

docker image ls

som gir ut:

itgit.app.uib.no:4567/helge.opedal/helloworld   test                 0e3949b654d8   16 minutes ago   455MB

Deretter bygge:

docker build -t helloworld .

og kjøre:

docker run -d -p 8083:80 helloworld:latest

Sjekk at containeren kjører:

docker container ls

som gir noe ala:

e69e8f59dc8f   helloworld:latest       "docker-php-entrypoi…"   41 seconds ago   Up 40 seconds   0.0.0.0:8083->80/tcp, :::8083->80/tcp   hungry_hamilton

Og til slutt selve lakmus-testen:

som da skal gi ut innholdet i index.html|php filen gitt i prosjektet.

Ansible 101 kurs AM

GITLAB

Huskeliste:

Brukar:Mihho/pubkita-glass-app

Se også:

Sette opp p1blog04, Wordpress multisite, apache, php, mariadb m.m.

ssh mihho@sokrates
cd /home/mihho/ANSIBLE-PROSJEKTER/p1blog04/ansible
ansible-playbook bootstrap-test.yaml -i prod.ini -u helgeo -bK --ask-pass

Installere php-fpm

Har lest denne, ikke sikkert det er rett måte å gjøre det på, men ser ut til å virke:

Annen info:

Repo lagt til med:

yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm

Og så:

yum install php74-php-fpm

Deretter endre i fil:

  • /etc/opt/remi/php74/php-fpm.d/www.conf

med:

listen = 127.0.0.1:9074

hvor 74 er samme siffer som php versjonen.

Deretter kan en legge til følgende i vhost configen:

 <FilesMatch \.php$>
   SetHandler proxy:fcgi://127.0.0.1:9074
 </FilesMatch>

og:

service httpd restart

En kan sjekke hvilke som er installert med:

php74 -modules

Dersom en heller vil bruke unix sock, så kan en legge til følgende i vhost configen:

<FilesMatch \.php$>
  SetHandler "proxy:unix:/var/opt/remi/php74/run/php-fpm/www.sock|fcgi://localhost/"
</FilesMatch>

WCAG

Web Content Accessibility Guidelines 1999->

Web, Innhold, Tilgjengelighet, Retningslinjer

WCAG prinsipper

Mulig å oppfatte, mulig å betjene, forståelig, robust
  • Gi tekstalternativer til alt Ikke-tekstlig innhold (eks: tekst til bilde)
  • Gi alternativer til tidsbaserte medier (lyd og video) (eks: teksting på video, tegnspråk)
  • Tilpasse, skille fra hverandre: (kontraster, farger)
  • Tilgjengelig med tastatur
  • Nok tid (eks: to-faktor autentisering)
  • Anfall (epilepsis, blinkende nettsider)
  • Navigebar
  • Leselig (språk, målgruppe)
  • Forutsigbar
  • Inndatahjelp
  • Kompatibel (eks: om en utvikler egne sjekk-bokser i skjemaer)

WCAG-EM

"Metode for vurdering av hele nettsider"

  • 5 steg. Plukke ut nøkkelsider, sjekke hvilke teknologier som er i bruk, eks: react, osv
  • tilslutt lag en rapport

Test verktøy

Andre verktøy

  • headings map: plugin til wordpress som sjekker headinger

Andre tips

  • merk i html kode med språk dersom det er ulikt språk i samme html kode

Eks:

This is an english text

WAI-ARIA

Accessible Rich Internet Applications

Attributter som en kan legge på andre tag'er. Mange ARIA-attributter -> flere tilgjengelighetsfeil. Men: kan hjelpe med: sidenavigering, tastatur, live-oppdateringer, widgets

Live oppdateringer: Eksempel, en fyller inn epost felt, men fyller feil syntaks (mangler @), feilmeldinger kommer etter tab-ut, men det får ikke en blind person med seg i leselisten. Dette kan wai-aria løse.

Widgets: kan merkes for at tastatur skal fungerere /skjermlesere skal kjenne igjen kontroller.

Installere PHP81-PHP-FPM på Centos 7 (remi repo)

yum install php81-php-fpm
yum install php81-php-mysqlnd
yum install php81-php-json
yum install php81-php-ldap
yum install php81-php-mbstring
yum install php81-php-bcmath
yum install php81-php-cli
yum install php81-php-common
yum install php81-php-gd
yum install php81-php-json
yum install php81-php-pdo
yum install php81-php-pear
yum install php81-php-process
yum install php81-php-xml

osv

Deretter endre i www.conf fila:

nano -w /etc/opt/remi/php81/php-fpm.d/www.conf

endre port number:

9000 -> 9081

Da blir det enklere om en skal ha flere PHP versjoner på samme boks. F.eks php74-php-fpm vil da portnummer:

9074

Start tjenesten:

service php81-php-fpm start

Sørg for at tjenesten starter ved reboot

systemctl enable php81-php-fpm

Deretter kan en kople vhost'en mot php81-php-fpm tjenesten. Legg inn følgende i 443 vhost config oppsettet:

<FilesMatch \.php$>
  SetHandler proxy:fcgi://127.0.0.1:9081
</FilesMatch>

Reload/restart tjenesten(e):

service php81-php-fpm; service httpd reload

For å verifisere at en faktisk får riktig php versjon, så legg inn en info.php i vhost'ens documentroot med:

<?php
  phpinfo();
?>

og sjekk:

Slå av error_reporting

En kan i www.conf filen legge til:

php_admin_value[error_reporting] = E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_DEPRECATED

for å slå av error_reporting.

Reset php module

For at det skal være default ny php versjon når en kjører cli oppdatering, f.eks:

wp plugin update-all

så må en endre dette med:

dnf module list php
dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
dnf -y makecache
dnf -y repolist
dfn module list php
dnf -y module reset php
dnf module install php:remi-8.1
locate php-fpm
php -v

Da skal en få at lokal php er 8.1 og dermed skal de pluginene som tester på hvilken lokal PHP versjon en har fungere.

Mediawiki and Azure AD Single Sign on?

Vi har fått til itwiki.test.uib.no. Nå prøver vi å omgjøre denne til itwiki.app.uib.no

Azure Portal:

portal.azure.com -> all services -> app registrations -> itwiki-saml... og så: ACCESS DENIED!

itwiki.test.uib.no

kjører på d1helge01, itwiki-oyvind, docker-compose, mw 1.42, sqlite db

Den dagen vi får tid til å utforske dette... lever i håpet..

certbot

Slette et sertifikat

Sjekk først om sertifikatet er i bruk. Det innebærer å søke i .inc filer og se om det refereres til. Først finne hvilke sertifikater en har:

certbot certificates

deretter når en vet hvilke som ikke er i bruk:

certbot delete --cert-name navn-på-cert.uib.no

certbot på grind.no

certbot certonly --nginx --non-interactive --agree-tos --email plattform@uib.no --server https://acme.sectigo.com/v2/OV --eab-kid nananananannanakid --eab-hmac-key nanannananananannajkey --domain grind.no --domain grind.app.uib.no --domain grind.testapp.uib.no --domain grind.test.uib.no --domain skigard.test.uib.no --domain skigard.uib.no

Som da gav ut:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/grind.no/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/grind.no/privkey.pem
   Your certificate will expire on 2024-02-02. To obtain a new or
   tweaked version of this certificate in the future, simply run
   certbot again. To non-interactively renew *all* of your
   certificates, run "certbot renew"

certbot for apex app apache reverse proxy

certbot certonly ---apache -d adgang.app.uib.no -d apex.app.uib.no -d apex-shared.app.uib.no -d avvik.app.uib.no -d bm.app.uib.no -d brutus.app.uib.no -d christie.app.uib.no -d fond.app.uib.no -d form.app.uib.no -d fragments.app.uib.no -d geosamples2.app.uib.no -d geosamples.app.uib.no -d lap.app.uib.no -d litteraturkiosken.app.uib.no -d oka.app.uib.no -d reg.app.uib.no -d sebapxp.app.uib.no -d skjema-2016.app.uib.no -d skjema.app.uib.no -d sys.app.uib.no -d testa.app.uib.no -d test.app.uib.no -d veiledning.app.uib.no

certbot en kort how-to beskrivelse

Les først denne: TLS/SSL-sertifikater - Bestilling

Jeg er litt paranoid, så pleier å ta vare på all config under /etc/httpd og /etc/nginx:

tar -cf httpd-YYYY-MM-DD.tar /etc/httpd/
tar -cf nginx-YYYY-MM-DD.tar /etc/nginx/

En kan også sjekke inn filer i et lokalt git om nødvendig:

cd /etc/httpd/
git add -f *
git commit -m "tar alt inn i git" *

En kan også sjekke om det er tsm backup:

dsmc restore "/etc/httpd/*" -pick -ina

Ok, så kan en begynne:

Først må certbot installeres:

yum install certbot

Om det er apache, så må også denne inn:

yum install python3-certbot-apache

For nginx:

yum install python3-certbot-nginx

Om maskinen er åpent tilgjengelig på nett på port 80/443, så bruk letsencrypt:

certbot certonly --apache -d domenenavn1 -d domenenavn2
certbot certonly --nginx -d domenenavn1 -d domenenavn2

Om ikke port 80/443 er åpent tilgjengelig for alle vhostene så bruk Sectigo:

certbot certonly --nginx --non-interactive --agree-tos --email plattform@uib.no --server https://acme.sectigo.com/v2/OV --eab-kid Notaeabkid --eab-hmac-key Notaeabhmackey --domain domenenavn1 --domain domenenavn2

Og for Apache:

certbot certonly --standalone --agree-tos --email plattform@uib.no --server https://acme.sectigo.com/v2/OV --eab-kid Notarealeab-kid --eab-hmac-key Notarealeabhmackey --domain certnavn.uib.no

NB: eab-kid og eab-hmac-key må en få generert hos Plattform. Som regel blir informasjonen lagt under /root

Opsjonene: --nginx, --apache og/eller --standalone ser ut til å virke litt om en annen. Her kan en prøve seg fram.

Sertifikatet blir liggende under:

/etc/letsencrypt/live/certnavn.uib.no/

I apache så kan en referere til cert, key, cahain med følgende:

SSLCertificateFile /etc/letsencrypt/live/certnavn.uib.no/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/certnavn.uib.no/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/certnavn.uib.no/chain.pem

For Ngxin gjelder disse linjene:

ssl_certificate      /etc/letsencrypt/live/certnavn.uib.no/fullchain.pem;
ssl_certificate_key  /etc/letsencrypt/live/certnavn.uib.no/privkey.pem;

For at sertifikatet skal fornyes automatisk, må det legges inn i /etc/crontab:

# Let's Encrypt certbot renew
MAILTO=osys@uib.no
0 6 * * 1 root /usr/local/bin/certbotrenew

innholdet i certbotrenew avhengiger om det er Letsencrypt eller Sectigo.

Om en lurer på hvilke sertifikater en har så kjør:

certbot certificates

Da vil en få cert navnet som en må referere til.

Letsencrypt (cat /usr/local/bin/certbotrenew):

#!/bin/bash
#set -e
/bin/certbot renew > /tmp/certbot.log
mail -s "Certbot renew on $(hostname)"  webhotell@it.uib.no < /tmp/certbot.log

Sectigo (cat /usr/local/bin/certbotrenew):

#!/bin/bash
#set -e
/bin/certbot renew --server https://acme.sectigo.com/v2/OV --cert-name "certnavn.uib.no" > /tmp/certbot.log
/bin/certbot renew >> /tmp/certbot.log
mail -s "Certbot renew on $(hostname)"  webhotell@it.uib.no < /tmp/certbot.log

cerbot på p1skjemaker04

certbot certonly --cert-name skjemaker1 --standalone --non-interactive --agree-tos --email plattform@uib.no --server https://acme.sectigo.com/v2/OV --eab-kid habahabasutsut --eab-hmac-key habahabasutsut --domain skjemakerbackend2.app.uib.no --domain skjemakerbackend.app.uib.no

certbot på p1blog01 - work in progress

Installasjon

yum install certbot
yum install python2-certbot-apache

For Rocky8:

yum install python3-certbot-apache
yum list installed | grep certbot
certbot certonly --standalone --non-interactive --agree-tos --email plattform@uib.no --server https://acme.sectigo.com/v2/OV --eab-kid LKG-not-a-real-kid-sdfsdfsdhgo95kFw --eab-hmac-key kldfg-not-a-real-key-yfiourtoIg --domain w.uib.no --domain "*.w.uib.no"
certbot certonly --dry-run --server https://acme.sectigo.com/v2/OV --domain w.uib.no
cat /usr/local/bin/certbotrenew
/bin/certbot renew --dry-run --server https://acme.sectigo.com/v2/OV --cert-name "w.uib.no"
nano -w ssl.inc

certbot på Kro work-in-progress

The requested apache plugin does not appear to be installed

Om pluginen apache mangler til certbot, så kan en:

yum install python2-certbot-apache

certbot certonly --apache

arkiv.uib.no (7)
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/arkiv.uib.no/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/arkiv.uib.no/privkey.pem
   Your certificate will expire on 2022-12-14. To obtain a new or
   tweaked version of this certificate in the future, simply run
   certbot again. To non-interactively renew *all* of your
   certificates, run "certbot renew"
[root@kro vhosts.d]# ls -al /etc/letsencrypt/live/arkiv.uib.no/
total 8
drwxr-xr-x  2 root root   88 Sep 15 09:38 .
drwx------ 10 root root 4096 Sep 15 09:38 ..
lrwxrwxrwx  1 root root   36 Sep 15 09:38 cert.pem -> ../../archive/arkiv.uib.no/cert1.pem
lrwxrwxrwx  1 root root   37 Sep 15 09:38 chain.pem -> ../../archive/arkiv.uib.no/chain1.pem
lrwxrwxrwx  1 root root   41 Sep 15 09:38 fullchain.pem -> ../../archive/arkiv.uib.no/fullchain1.pem
lrwxrwxrwx  1 root root   39 Sep 15 09:38 privkey.pem -> ../../archive/arkiv.uib.no/privkey1.pem
-rw-r--r--  1 root root  692 Sep 15 09:38 README

Deretter referere til disse i en ny ssl-arkiv.uib.no.inc fil, of deretter oppdatere arkiv.uib.no.conf filen med referanse til ny ssl-inc fil.

Flere domener:

certbot certonly --apache -d andar.h.uib.no -d arkiv.uib.no  -d atlascolors.h.uib.no  -d bio.h.uib.no  -d birkeland.uib.no  -d booking.h.uib.no  -d boolean.h.uib.no  -d corviz.h.uib.no  -d darwin.uib.no  -d discretion.uib.no  -d dna.h.uib.no  -d eecrg.h.uib.no  -d elo2015.h.uib.no  -d emid.h.uib.no  -d expearth.uib.no  -d ferdighetssenteret.h.uib.no  -d fmri.uib.no  -d h2.h.uib.no  -d humle.h.uib.no  -d itschemistry.h.uib.no  -d jensen.h.uib.no  -d ka.uib.no  -d kro.h.uib.no  -d kurs.h.uib.no  -d mso.uib.no  -d nmr.h.uib.no  -d radioweb.uib.no  -d rc-resources.h.uib.no  -d solli.h.uib.no  -d theunissen.h.uib.no  -d turspor.h.uib.no  -d um.uib.no  -d vis.uib.no  -d watson.h.uib.no  -d www.birkeland.uib.no -d phpmyadmin.h.uib.no

Benytt ansible for certbot

Se også Cato som har laget en ansible som kan løse dette:

ldap søk

Finn detaljer om gruppen vev_filer_ka:

curl ldap.uib.no/ou=vev_filer_ka,ou=organization,dc=uib,dc=no

Finn detaljer om gruppen SV-AORG:

curl ldap.uib.no/ou=SV-AORG,ou=organization,dc=uib,dc=no

Finn medlemmer av gruppen vev_filer_kmd:

ldapsearch -x -H ldap://ldap.uib.no cn=vev_filer_kmd


Multifaktor engelsk beskrivelse

Sertifikater på veg ut?

sms på sokrates (huskelapp)

Lagt under /root

Startes med:

perl sms.pl -D

Hint:

yum install perl-XML-Simple

Muligens fungerer cpn også, men ikke sikker:

yum install perl-CPAN

Deretter:

cpan

og så:

install XML::Simple

eksempel på script med sms utsendelse:

  • /home/mihho/gatewayapi.com/test.sh

Boka

Bruker:Mihho/Bøker/Applikasjonsdrift

Brukar:Mihho/SiFra

Openstack ubuntu server Cytomine

ssh sokrates
ssh -i helgeubuntu_id_rsa ubuntu@158.39.77.44

evt:

ssh -i .ssh/helgeubuntu_id_rsa ubuntu@cytomine.app.uib.no

Pakker, docker m.m.:

https://www.ctl.io/developers/blog/post/what-is-docker-and-when-to-use-it/

sudo apt-get update
apt install unzip
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
mkdir /data/www
mount /dev/disk/by-uuid/d47fe46e-5572-4fed-958c-1cb8b3e403b6 /data/www
nano -w /etc/fstab
df -kh
apt-get update
apt install unzip
apt-get install apt-transport-https ca-certificates curl software-properties-common
mkdir Cytomine_src/
cd Cytomine_src/
wget https://github.com/cytomine/Cytomine-bootstrap/archive/master.zip -O bootstrap.zip
unzip bootstrap.zip
mv Cytomine-bootstrap-master Cytomine-bootstrap
apt-get update
apt-get install     apt-transport-https     ca-certificates     curl     software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
apt-key fingerprint 0EBFCD88
cat /etc/apt/sources.list
nano -w /etc/apt/sources.list
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
nano -w /etc/apt/sources.list
apt-get update
apt-get install docker-ce

Stoppe alle docker containerne på en gang

docker stop $(docker ps -a -q)

Hmm

E: Failed to fetch https://storebits.docker.com/ee/ubuntu/sub-0c1aa770-729b-4fa8-be64-609811fb3cf5/ubuntu/dists/zesty/stable-17.06/binary-amd64/Packages  404  Not Found


Mine saker i RTS

<rss>https://rts.uib.no/issues.atom?assigned_to_id=me&key=b3d159828740aea0d08d48718b40a3d42009c485&set_filter=1&sort=priority%3Adesc%2Cupdated_on%3Adesc</rss>

App (android/iphone?) utviklere


MariaDB Master - Slave replikering

Lesestoff:

Master

På Master, bruker phpMyAdmin. Gå til: Replication -> master replication -> configure it

Velg: Replicate all databases; Ignore

Da skal en få opp linjene som skal legges til /etc/my.cnf filen. I mitt tilfelle ble det:

server-id=6653021
log_bin=mysql-bin
log_error=mysql-bin.err
binlog_ignore_db=mysql
binlog_ignore_db=a3
binlog_ignore_db=studkatold
binlog_ignore_db=testtobeignored

Antar at det kan være lurt å ignore databasen 'mysql' i og med at den innholder privilegier som kanskje kun bør gjelde for Master. Men, om en planlegger å bruke Slaven som stand-by, så må vel denne også replikeres.

En kan også snu på konfigurasjonen og velge spesifikt hvilke databaser som skal replikeres. Det er ikke å anbefale, for da blir ikke nye databaser tatt med om en glemmer å legge til disse i my.cnf filen.

Eksempel på dette:

server-id=6653021
log_bin=mysql-bin
log_error=mysql-bin.err
binlog_do_db=ekt

Så må en lage en ny bruker som skal benyttes til replikeringen. Kjør følgende på Master:

GRANT REPLICATION SLAVE ON *.* TO replication_user;

Så starte MariaDB på nytt:

service mariadb restart

Da skal en kunne se under Master replication følgende verdier (eksempelvis selvfølgelig):

File: mysql-bin.000001
Position: 245
Binlog_doDB: ekt
Binlog_ignore_DB: 

For at Slaven skal kunne hente dataene, så må Master tillate koplinger fra Slave på port 3306. En må da oppdatere i brannmuren med:

-A INPUT -s 158.39.74.35/32 -p tcp --dports 3306 -j ACCEPT

Så gjør en tilsvarende på Slaven, men denne gang går en til Slave configuration. Da får en forslag til server-id:

server-id=1496741332

Så må databasene som skal replikeres speiles mellom Master og Slave. Dette medfører nedetid på Master (databaser og tabeller på låses under kopieringen!). Kan gjøres med på Master:

FLUSH TABLES WITH READ LOCK

Finn så posisjonen til binær loggen med:

SHOW MASTER STATUS

For å speile dataene så tipper jeg en vanlig dump og restore vil funke:

På Master:

mysqldump database

På Slave:

mysql -u root -p < dumpfil.sql

Så må Slaven startes. Logg inn på Slaven, kjør mysql og følgende sql:

CHANGE MASTER TO
 MASTER_HOST='chartest7.uib.no',
 MASTER_USER='replication_user',
 MASTER_PASSWORD='clksdjfg345dløsfkgj',
 MASTER_PORT=3306,
 MASTER_LOG_FILE='mysql-bin.000001',
 MASTER_LOG_POS=245,
 MASTER_CONNECT_RETRY=10;

Så kan en starte slaven:

START SLAVE;

En bør teste at en oppdatering i en record på Master faktisk vises på Slaven. Videre bør en teste at dersom synkroniseringen stoppes over tid (f.eks med lock-tables på Slaven), så kommer databasene i synk igjen. Kan testes ved at en blokkerer Slaven i brannmuren.

Videre som en bør se på er om det er utfordringer med MyIsam kontra Innodb. Så langt som jeg har testet, så virker det som at både MyIsam og innodb funker fint...

bash script for å teste backup på Slave med lock-tables

Dersom en lager et script som tar fortløpende 10 databasedumper av en database, så kan en teste om Slaven greier å hente seg inn igjen når det skjer endringer på Master. Teorien er vel at så lenge en backup går (som kan ta mange minutter), så skal ikke slaven bli oppdatert. Men, når dumpen på slaven er gjort, så må Slaven innhente seg igjen med data fra Master. Har begynt med denne:

#!/bin/bash
dato=`date`
A=0
# Kjør 10 sammenhengende mysql dumper (noe som vil ta ca 30 min)
# Gjør endringer i Master-databasen underveis. Hva skjer da på Slaven?
while [ $A -lt 11 ]; do
  echo "Nå kjører vi loop nummer $A. Databasen er Skjemaker"
  mysql -u root -p`cat /root/mariadb` skjemaker -e "FLUSH TABLES WITH READ LOCK;" &
  sleep 3
  mysqldump -u root -p`cat /root/mariadb` --lock-tables skjemaker > /backup/skjemaker-"$dato".sql
  let A=A+1
  mysql -u root -p`cat /root/mariadb` -e "UNLOCK TABLES;"
done

Bot i itwiki'en

Bruker:Botit er en bruker her i ITwiki'en som kan brukes til litt av hvert...

Min aller første sak i Issue Tracker! Fra meg selv, til meg selv, nr 267 i rekken:

Bruker:Mihho/Oppgaver_2017

Diverse

{{#calendar: year=2016 | month=september | title=test }}

Masonry javascript kode

Denne er i sving her i ITwiki'en og får boksene på hovedsiden til å fly fram og tilbake avhengig av størrelsen på vinduet..

Div

<a class="btn" href>test</a>

Math

Følgende:

<math>\int_a^x \!\!\!\int_a^s f(y)\,dy\,ds= \int_a^x f(y)(x-2y)\,dy</math>

blir til: [math]\displaystyle{ \int_a^x \!\!\!\int_a^s f(y)\,dy\,ds= \int_a^x f(y)(x-2y)\,dy }[/math]

Kople til Windows fellesområde fra Centos/Redhat

Først må du ha installert cifs-utils:

yum install cifs-utils

Editer så fstab fila:

vim /etc/fstab

Legg inn følgende på én linje (eksempelvis):

//felles.uib.no\ADM\IT\Felles\Referat    /var/doc/it/referat    cifs    credentials=/root/secret.txt,uid=brukernavn,suid,gid=ansatt,sec=ntlmsspi,ro    0 0

Hvor filen secret.txt må holdes skjult for alle (hint: chmod 400 filnavn, og legges under /root katalogen), og innholdet i denne er typisk:

username=ditt-uib-brukernavn
password=
domain=UIB

NB: Når du skal mounte opp, så åpner du secret.txt filen (med vim eller annet egnet) og skriver inn ditt UiB passord bak password=

Så kan du mounte:

mount -a

Når du har verifisert at du kan se innholdet f.eks med:

ls -al /var/doc/it/referat

Så åpner du secret.txt filen igjen og sletter passordet igjen.

Ellers gjelder:

  • felles.uib.no serveren en kopler opp mot
  • ADM er delt share
  • IT\Felles\Referat er stien
  • /var/doc/it/referat er lokalt mount point (lokal katalog som peker til området på Windows serveren)
  • cifs er protokollen
  • sec=ntlmsspi er sikkerhetsprotokoll
  • ro (read only), smart å ha dersom en kun skal lese filene.
  • De to siste numrene har noe med dump og pass å gjøre (http://askubuntu.com/questions/9939/what-does-the-last-two-fields-in-fstab-mean)

Området koples opp med:

mount -v /var/doc/it/referat

Extension SimpleTable

Følgende:

<tab class="wikitable sortable" sep=comma head=top>
Overskrift 1,Overskrift 42,Overskrift 3,Overskrift 4
Field 4,Field 5,Field 6,tjoh
Field 7,Field 8,Field 9,s
</tab>

blir: <tab class="wikitable sortable" sep=comma head=top> Overskrift 1,Overskrift 42,Overskrift 3,Overskrift 4 Field 4,Field 5,Field 6,tjoh Field 7,Field 8,Field 9,s </tab>

Syntax highlighting

<source lang=bash>
#!/bin/bash
echo "Hello World"
</source>
#!/bin/bash
echo "Hello World"

Oppgaver Høsten 2014

Oppgaver Våren 2014

Diverse

Presentasjoner og kurs (en veeldig ikke-oppdatert liste)

2014

2013

2012

2007

<rss>http://helge.b.uib.no/feed/</rss>

Diverse lenker

Kan en laste opp zip filer i itwiki'en?

File:Temp.zip Ja, ser det ut til :)