Természetesen ez az oldal is használ cookie-kat.
Nem tetszik?

Nem, elmegyek
home

T  h  e
D a r k
S i t e

Magánjellegű internetes dokumentációs és publikációs felület és kísérleti weboldal a Morkpy tartalomkezelő rendszer fejlesztési folyamatainak tesztelésére és szemléltetésére

Címke: linux


Docker login

dark Dokumentáció 2023-06-16 09:18:00

Ha a docker login sipákol a dbus miatt.


Azaz a

docker login

eredménye például az, hogy

error getting credentials - err: exit status 1, out: `GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.secrets was not provided by any .service files`

akkor

A megoldás az, hogy

apt install gnupg2 pass



Docker mocsok eltakarítása

dark Dokumentáció 2022-11-10 10:51:00


docker system prune -a --volumes
truncate -s 0 /var/lib/docker/containers/*/*-json.log

--all	-a		Remove all unused images not just dangling ones
--force	-f		Do not prompt for confirmation
--volumes		Prune anonymous volumes

OpenVPN kulcsok kezelése easy-rsa-val

dark Dokumentáció 2022-11-01 08:21:00


Másoljuk az easy-rsa könyvtárat az /etc/openvpn alá

cd /etc/openvpn
cp -r /usr/share/easy-rsa/ .
cd easy-rsa

Vidáman létrehozzuk a nyilvános kulcsú infrastruktúrát, a dh cserekulcsot, a tanúsító kulcsot, a szerver kulcsot és tanúsítványt, és a ta kulcsot.

./easyrsa init-pki
./easyrsa gen-dh
./easyrsa build-ca nopass
./easyrsa build-server-full SERVER_NAME nopass
openvpn --genkey --secret ta.key

Aztán jöhetnek is a kliensek.

./easyrsa build-client-full CLIENT_NAME nopass

A konfigokat a saját fejlesztésű szkriptünkkel hozzuk létre.

/usr/bin/dlt_genovpn -a server -n servername
/usr/bin/dlt_genovpn -a client -n clientname -r server_hostname



Shell script varázslat: find és xargs

dark Dokumentáció 2021-12-07 11:43:00

Find és xargs.


Üres könytárak törlése

find ./ -type d -empty -print0 | xargs -0 -I {} rmdir -v "{}"

-print0 -0 : A szpészek és sortörések okozta problémák kiküszöbölésére szolgál.

-I {} : Az xargs által átvett argumentumokat helyettesíti be a meghívott parancs argumentum listájába. Nézhetne ki úgy is, hogy xargs -0 -I dir rmdir -v "dir" .


Shell script varázslat

dark Dokumentáció 2021-11-11 19:44:00

Amikor az kell, hogy az aktuális könyvtár a szkript saját könyvtára legyen.


Az egyszerű megoldás

#!/bin/sh

cd "$(dirname $0)"

A komolyabb

Hogy a könyvtár váltás kövesse a szimbolikus linkeket.

#!/usr/bin/env bash

SCRIPTDIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
cd "${SCRIPTDIR}" || exit 1

A GOG-nál így csinálják

A játékok start.sh szkriptjének első sorai.

#!/usr/bin/env bash

CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd "${CURRENT_DIR}"

A legszebb megoldás Bash nélkül

#!/usr/bin/env sh

cd "$(dirname "$(readlink -f "$0")")" || exit


Elfelejtett MySQL root jelszó módosítása

dark Dokumentáció 2020-12-01 14:09:00


Leállítjuk a MySQL szervert

Elindítjuk a --skip-grant-tables paraméterrel, aminek hatására localhostról jelszó nélkül tudunk csatlakozni.

mysqld_safe --skip-grant-tables &

Módosítjuk a root jelszót.

UPDATE mysql.user SET Password=PASSWORD('ujjelszo') WHERE User='root';
FLUSH PRIVILEGES;

CTRL + C

Újraindítjuk a MySQL szervert.

Örülünk.


Debian 10 - phpMyAdmin

dark Dokumentáció 2020-12-01 10:10:00


Debian 10-re való frissítéskor észrevehetjük, hogy a phpMyAdmin csomag obsolete lett, azaz hivatalos tárolóból már nem telepíthető. Nem nagy baj, többnyire eddig is kerültük az apt install webescuccrengetegfüggőséggelésésdisztribúcióspecifikuskonfigurációval típusú megoldásokat, de ha esetleg van még ilyenünk, akkor ideje eltakarítani és beüzemelni egy jobb megoldást.

Először tehát takarítunk

apt --purge remove phpmyadmin
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
  dbconfig-common dbconfig-mysql libjs-sphinxdoc libjs-underscore php-bz2 php-curl php-gd php-mysql php-php-gettext php-phpseclib php7.3-bz2 php7.3-curl php7.3-gd php7.3-mysql
Use 'apt autoremove' to remove them.
The following packages will be REMOVED:
  phpmyadmin*
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 24.8 MB disk space will be freed.
Do you want to continue? [Y/n]y
(Reading database ... 55135 files and directories currently installed.)
Removing phpmyadmin (4:4.6.6-4+deb9u2) ...
Determining localhost credentials from /etc/mysql/debian.cnf: succeeded.

A felmerülő kérdésekre igent mondunk, azaz:

Deconfigure database for phpmyadmin with dbconfig-common?

Yes.

Delete the database for phpmyadmin?

Yes.

dbconfig-common: dumping mysql database phpmyadmin to /var/tmp/phpmyadmin.phpmyadmin.2020-12-01-10.08.mysql.5w9c3U.
dbconfig-common: dropping mysql database phpmyadmin.
dropping database phpmyadmin: success.
verifying database phpmyadmin was dropped: success.
dbconfig-common: revoking privileges for user phpmyadmin on phpmyadmin.
revoking access to database phpmyadmin from phpmyadmin@localhost: success.
Processing triggers for man-db (2.8.5-2) ...
(Reading database ... 53470 files and directories currently installed.)
Purging configuration files for phpmyadmin (4:4.6.6-4+deb9u2) ...

Jobb megoldás 1 - Adminer

Egyetlen PHP fájlból álló MySQL adminisztrációs felület, amit bemásolhatunk bármely PHP projektünkbe.

https://www.adminer.org/

Jobb megoldás 2 - Docker

docker-compose.yml

version: '3'
services:
  phpmyadmin:
    image: phpmyadmin
    container_name: phpmyadmin
    network_mode: bridge
    environment:
      - PMA_HOSTS=172.17.0.1
    restart: always
    ports:
      - 127.0.0.1:81:80

Megjegyzések

A PMA_HOSTS (vesszővel tagolt lista) környezeti változóval adhatjuk meg a MySQL szervek ip címeit, vagy hosztneveit.

Indítás az yml fájlt tartalmazó könyvtárból

docker-compose up -d

Nginx vhost

server {
    listen 80;
    server_name phpmyadmin.domain.hu;

    location / {
        proxy_pass http://127.0.0.1:81;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

MySQL konfiguráció

/etc/mysql/mariadb.conf.d/50-server.cnf

A MySQL szerver figyeljen az összes interface-en.

[server]
bind-address = 0.0.0.0

És még

mysql -h localhost -u root -p
SHOW GRANTS FOR 'root'@'localhost';
+--------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@localhost                                                                                                                        |
+--------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost` IDENTIFIED VIA unix_socket USING '*...' WITH GRANT OPTION |
| GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION                                                                                    |
+--------------------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.000 sec)
SHOW GRANTS FOR 'root'@'%';
ERROR 1141 (42000): There is no such grant defined for user 'root' on host '%'
UPDATE mysql.user SET Host='%' WHERE Host='localhost';
UPDATE mysql.user SET plugin='mysql_native_password';
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'root'@'%';
+--------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@%                                                                                                              |
+--------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO `root`@`%` IDENTIFIED BY PASSWORD '*...' WITH GRANT OPTION |
+--------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.001 sec)

Működik


Vlmcsd KMS server

dark Dokumentáció 2020-11-27 14:22:00

Azaz nyílt forrású Windows (meg egyébb Microsoft termék) aktiváló szerver üzembe helyezése helyi hálózaton


Telepítés és indítás

docker-compose.yml

version: '2'
services:
  vlmcsd:
    image: 'mikolatero/vlmcsd:latest'
    network_mode: bridge
    ports:
      - '1688:1688'
docker-compose up -d

A Windows beállítása

Megmondjuk a Windows-nak, hogy mostantól a server hosztnévvel, vagy ip címmel érheti el a KMS szervert. Természetesen adminisztrátorként, parancssorból.

slmgr /skms server

Megadjuk a termékkulcsot. Windows 10 Professional esetén például:

slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX

Végül elvégezzük az aktiválást.

slmgr /ato
slmgr /dli

Nextcloud telepítése

dark Dokumentáció 2020-11-25 20:12:00

A Moodle telepítés leírásából kimaradtak a Nextcloud docker image beállításának egyes részletei. Szándékosan, mivel Nextcloud-ot máshol, más okból is használunk, ezért a leírásának külön dokumentumban a helye.


Telepítés

Ugyanúgy docker-compose-t használunk.

docker-compose.yml

version: '2'
services:
  nextcloud:
    image: 'nextcloud:20.0.2'
    network_mode: bridge
    ports:
      - '127.0.0.1:18083:80'
    volumes:
      - ./volumes/nextcloud:/var/www/html
    extra_hosts:
      - 'docker:172.17.42.1'
    environment:
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=password
      - MYSQL_HOST=172.17.42.1
      - NEXTCLOUD_ADMIN_USER=root
      - NEXTCLOUD_ADMIN_PASSWORD=password
      - NEXTCLOUD_TRUSTED_DOMAINS=cloud.domain.hu
      - SMTP_HOST=172.17.42.1
      - SMTP_PORT=25
      - MAIL_FROM_ADDRESS=cloud@domain.hu

Megjegyzések

  • Az image értéknél fontos a pontos verzió megadása, hogy az ismételt docker-compose up hívásokkor még véletlenül se frissüljön automatikusan az image, mint ahogy a latest tag esetén tenné.
  • A network_mode: bridge szükséges, hogy a konténer a megadott ip címen elérje a docker host-on futó adatbázis szervert. Szép, ha a teljes szolgáltatás saját alhálózaton helyezkedik el, saját adatbázis szerverrel, azaz microservices, de futtasson és backup-oljon külön mysql konténert minden projekthez az, akinek ahhoz van kedve.
  • Az extra_hosts alatti elemek hostname / ip cím párok. Az így definiált hostnevek ugyanúgy használhatóak a konténerben, mintha az /etc/hosts fájlban lennének megadva.

Konténer indítása

# indítás
docker-compose up
# vagy
# indítás a háttérben
docker-compose up -d

Nginx vhost - reverse proxy

server {
    listen 80;
    listen 443 ssl;
    server_name cloud.domain.hu;

    ssl_certificate /etc/letsencrypt/live/cloud.domain.hu/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/cloud.domain.hu/privkey.pem;

    if ($scheme = http) {
        return 301 https://$host$request_uri;
    }

    include includes/letsencrypt;

    location = /.well-known/carddav {
        return 301 $scheme://$host:$server_port/remote.php/dav;
    }
    location = /.well-known/caldav {
        return 301 $scheme://$host:$server_port/remote.php/dav;
    }

    location / {
        proxy_pass http://127.0.0.1:18083;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_redirect off;
        proxy_buffering off;
        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    }
}

Megjegyzések

  • A location = /.well-known/carddav és location = /.well-known/caldav bejegyzések teszik lehetővé, hogy carddav és caldav protokollon keresztül elérjük a konténerben futó Nextcloud címtárát és naptárát.
  • A proxy_set_header Upgrade $http_upgrade; és  proxy_set_header Connection "upgrade"; sorok a websocket kapcsolatok működéséhez szükségesek. Lsd: http://nginx.org/en/docs/http/websocket.html .
  • @TODO: Utánanézni, hogy a proxy_redirect off; és proxy_buffering off; miért kellenek.

Konfiguráció: volumes/nextcloud/config/config.php

'trusted_domains' =>
  array (
      0 => 'localhost',
      1 => 'cloud.domain.hu'
  ),
  'overwrite.cli.url' => 'https://cloud.domain.hu',
  'overwriteprotocol' => 'https',

Hogyan üzemeltem be a Moodle Course Management System-et

dark Dokumentáció 2020-11-25 08:14:00

Azaz eLearning rendszer felépítése Docker alapon Nextcloud integrációval


Telepítés

Mindenek előtt adjunk hálát a Dockernek, mert nélküle nemigen telepítenénk ilyen összetett cuccokat, inkább megírnánk magunk - mint ahogy azt még pár nappal ezelőtt is terveztük. Áldott legyen.

Miben is van a Moodle megírva? Nem mindegy? Hát ezért adunk hálát a Dockernek. Még az is lehet, hogy Ruby-ban, mint a GitLab, de az se baj.

Mondjuk ki érti, miért kell egy webalkalmazást Ruby-ban csinálni, mikor ott a jó öreg PHP, meg van már Python, ami ennek a honlapnak is az alapja, ha meg igazán durvát akarunk, programozhatjuk C++(cémegmeg)-ben is. ... Egyesek nem tudják jódolgukban micsinálnak. Jó, hogy nem mindjárt Scratch-ben, vagy Perl-ben ...

A lényegre térve

Először használtam docker-compose -t a saját feljesztésű szkriptjeim és konfigurációs fájljaim helyett. Nem esett rosszul. A docker-compose hátránya, hogy a docker-compose.yml -ből nem lehet shell parancsokat hívni. Előnye, hogy a docker összes funkciója elérhető rajta keresztül és nem kell évekkel ezelőtt írott szkripteket túrni, hogy lássuk, hogy egy adott beállítást hogyan kell megvalósítani. Elég a docker-compose dokumentációját túrni, ami talán rendesen meg van írva. Mert azok ott ráérnek arra is.

Tanulság : ne próbáljunk meg egy kész eszközt saját megoldásokkal kiváltani csak azért, mert nem akarjuk elolvasni a dokumentációját.

Feladat : a régi docker kezelő szkriptjeim lecserélése docker-compose-ra.

docker-compose.yml

version: '2'
services:
  nextcloud:
    image: 'nextcloud:20.0.2'
    network_mode: bridge
    ports:
      - '127.0.0.1:18083:80'
    volumes:
      - ./volumes/nextcloud:/var/www/html
    extra_hosts:
      - 'docker:172.17.42.1'
    environment:
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=password
      - MYSQL_HOST=172.17.42.1
      - NEXTCLOUD_ADMIN_USER=root
      - NEXTCLOUD_ADMIN_PASSWORD=password
      - NEXTCLOUD_TRUSTED_DOMAINS=cloud.domain.hu
      - SMTP_HOST=172.17.42.1
      - SMTP_PORT=25
      - MAIL_FROM_ADDRESS=cloud@domain.hu
  moodle:
    image: 'docker.io/bitnami/moodle:3.10.0'
    network_mode: bridge
    ports:
      - '127.0.0.1:18082:8080'
    volumes:
      - ./volumes/moodle_data:/bitnami/moodle
      - ./volumes/moodledata_data:/bitnami/moodledata
    extra_hosts:
      - 'docker:172.17.42.1'
    environment:
      - MOODLE_USERNAME=root
      - MOODLE_PASSWORD=password
      - MOODLE_EMAIL=moodle@domain.hu
      - MOODLE_SITE_NAME=moodle
      - MOODLE_DATABASE_HOST=172.17.42.1
      - MOODLE_DATABASE_PORT_NUMBER=3306
      - MOODLE_DATABASE_NAME=moodle
      - MOODLE_DATABASE_USER=moodle
      - MOODLE_DATABASE_PASSWORD=password
      - ALLOW_EMPTY_PASSWORD=yes

Megjegyzések

  • Az image értéknél fontos a pontos verzió megadása, hogy az ismételt docker-compose up hívásokkor még véletlenül se frissüljön automatikusan az image, mint ahogy a latest tag esetén tenné.
  • A network_mode: bridge szükséges, hogy a konténer a megadott ip címen elérje a docker host-on futó adatbázis szervert. Szép, ha a teljes szolgáltatás saját alhálózaton helyezkedik el, saját adatbázis szerverrel, azaz microservices, de futtasson és backup-oljon külön mysql konténert minden projekthez az, akinek ahhoz van kedve.
  • Az extra_hosts alatti elemek hostname / ip cím párok. Az így definiált hostnevek ugyanúgy használhatóak a konténerben, mintha az /etc/hosts fájlban lennének megadva.

Konténerek indítása

# indítás
docker-compose up
# vagy
# indítás a háttérben
docker-compose up -d

Nginx vhost - reverse proxy

server { 
    listen 80;
    listen 443 ssl;
    server_name moodle.domain.hu;

    ssl_certificate /etc/letsencrypt/live/moodle.domain.hu/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/moodle.domain.hu/privkey.pem;

    if ($scheme = http) {
        return 301 https://$host$request_uri;
    }

    include includes/letsencrypt;

    location / {
        proxy_pass http://127.0.0.1:18082;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
        proxy_set_header X-Real-IP $remote_addr;
        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    }
}

Megjegyzések

A titkosítást szokás szerint a docker host-on futó nginx reverse proxy intézi, a konténerben levő Moodle meg persze, hogy nem viseli ezt olyan jól. A konfiguráció így némi módosításra szorul.

Konfiguráció: volumes/moodle_data/config.php

$CFG->wwwroot = 'https://moodle.domain.hu';
$CFG->reverseproxy = true;
$CFG->sslproxy = true;

Nextcloud integráció

HTTPS nélkül nem fog működni. Nem úgy megy az manapság, hogy webes szolgáltatásokat csinálunk külső fél, legalább a letsencrypt igénybevétele nélkül.

Nextcloud

Az Administration / Security / OAuth 2.0 clients menüpontban felveszünk egy új klienst mondjuk Moodle néven. A Redirection URI https://moodle.domain.hu/admin/oauth2callback.php lesz. Mentés után láthatóvá válik a Client Identifier és a Secret , amiket a kliens beállításánál használhatunk.

Moodle

A Site administration / Server / OAuth 2 services / Create new Nextcloud service menüpontban beállítjuk a Nextcloud OAuth 2 szolgáltatót. A Name lehet Nextcloud, a Client id és a Client secret az előző bekezdésben említett értékek. A  Service base URL a Nextcloud szolgáltatásunk címe, azaz https://cloud.domain.hu.

A következő lépés: Site administration / Plugins / Repositories / Manage repositories , ahol engedélyezzük a Nextcloud-ot, majd a Settings menüpontban létrehozunk egy repository-t.

A dolog elméletileg készen van. A felhaszálók felhasználhatnak a Nextcloudban tárolt fájlokat a Moodle tartalmainak szerkesztéséhez.


zRam - tömörített ram swap

dark Dokumentáció 2017-08-06 11:39:00

Memóriában tárolt tömörített swap eszköz létrehozása Linux-on.


Amikor nem telik egy-két nagyobb memória modulra...

Néhány egyszerű parancs

# Kernel modul betöltése
modprobe zram num_devices=2
# Tömörítési algoritmus beállítása
echo lz4 > /sys/block/zram0/comp_algorithm                                     
# Blokk eszköz méretének beállírása 4Gb-ra
echo 4G > /sys/blk/zram0/disksize    
# Blokk eszköz formázása swap-ként
mkswap /dev/zram0                      
# Prioritás beállítása. A nagyobb érték magasabb prioritást jelent.
# Lehetséges értékek: -1 - 32767
swapon -p 100 /dev/zram0