15/10/2024

Van mysql naar mariadb, en SSL is required

Filed under: — cybrarian @ 9:14 am

mysql, mariadb

Uit oude gewoonte log ik op de commandolijn nog in op mijn database-servers met het “mysql” commando, hoewel ze ondertussen op mariadb draaien. Aangezien mariadb compatibel is/was met mysql, was dat nooit een probleem.
(ik ben “tester” op mijn lokale machine “tumbleweed”)

Maar nu:
tester@tumbleweed:~> mysql -u mydblogin -h dbserver01.mydomain.interal -p
mysql: Deprecated program name. It will be removed in a future release, use '/usr/bin/mariadb' instead
Enter password: ...

Oplossing: eenvoudig mysql vervangen door mariadb als commondolijn oproep.
(ps: voorlopig kan je nog wel verder, en is het maar een waarschuwing)

Secure

De volgende fout dient zich dan aan:

tester@tumbleweed:~>mariadb -u mydblogin -h dbserver01.mydomain.interal -p
Enter password: ****
ERROR 2026 (HY000): TLS/SSL error: SSL is required, but the server does not support it

Het gebruik van de versleutelde verbinding is standaard geworden, en als je een reden hebt om dat niet te gebruiken (intern netwerk, ..) moet je het expliciet opgeven met een parameter als --skip_ssl :

mariadb -u mydblogin -h dbserver01.mydomain.interal --skip_ssl -p

tester@tumbleweed:~> mariadb -u mydblogin -h dbserver01.mydomain.interal --skip_ssl -p
Enter password: ****
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2439
Server version: 10.11.8-MariaDB-0ubuntu0.24.04.1 Ubuntu 24.04
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> exit
Bye

TLD voor het lokale netwerk: .INTERNAL

Filed under: — cybrarian @ 9:10 am

ICANN heeft in januari voorgesteld om “.internal” voor te behouden voor lokale netwerken, zoals het thuisnetwerk of een bedrijfsnetwerk dat niet publiek aan internet hangt.

Dat lost het probleem op dat voordien allerlei geïmproviseerde eigen namen werden gebruikt als “.loc”, “.local”, “….”, zonder dat er een éénduidige afspraak was.

Die is er nu wel, want in augustus besliste ICANN om inderdaad .INTERNAL daarvoor te reserveren.

31/7/2023

mariadb unix_socket authentication plugin

Filed under: — cybrarian @ 8:51 am

unix_socket authentication?
Bij het draaien van mariadb-secure-installation na installatie van mariadb komt de vraag:
Switch to unix_socket authentication [Y/n]
Enabled successfully!
Reloading privilege tables..
... Success!

Gebruiker maken:
CREATE USER username@hostname IDENTIFIED VIA unix_socket;
of
GRANT SELECT ON db.* TO username@hostname IDENTIFIED VIA unix_socket;

Uitzondering maken
Voor bepaalde account de gewone wachtwoorden gebruiken:

ALTER USER root@localhost IDENTIFIED VIA mysql_native_password;
SET PASSWORD = PASSWORD('mijnwachtwoord');


Opgepast bij root; misschien zijn er systeemscripts die veronderstellen dat er unix_socket verificatie is.

Starten zonder unix_socket authentication:

mysql unix_socket=OFF

PhpMyAdmin
Origineel werkte login op phpMyAdmin niet meer; na het draaien van het mysql_secure_installation met het uitdrukkelijk opgeven van het wachtwoord voor root werkt het wel, en kan je op phpMyAdmin dus inloggen met “root”.

You already have your root account protected, so you can safely answer 'n'.
.
Change the root password? [Y/n]
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!

Zoniet moet je een aparte “phpmyadmin” account aanmaken en die alle rechten geven.

CREATE USER phpmyadmin@localhost IDENTIFIED BY 'mijnwachtwoord';
GRANT ALL ON '*.*' TO phpmyadmin@localhost WITH GRANT OPTION;

23/5/2023

MariaDb fouten “Can’t connect ..” / “.. is not allowed to connect ..”

Filed under: — cybrarian @ 12:30 pm

Twee foutmeldingen die dikwijls voorkomen na een login poging:

ERROR 2002 (HY000): Can’t connect to server on ‘zundert.mylab.loc’ (115)

ERROR 1130 (HY000): Host ‘192.168.1.205’ is not allowed to connect to this MySQL server

1. Can’t connect: configuratiebestand

cybr@achel:~> mysql -u copyleftboardRW -h zundert.mylab.loc -p
Enter password:
ERROR 2002 (HY000): Can't connect to server on 'zundert.mylab.loc' (115)

Ga naar de configuratie van de database server:
root@zundert:/# mcedit /etc/mysql/my.cnf

Verander het ip adres van waar de server naar “luistert”;
van localhost 127.0.0.1 naar een ander, bv 0.0.0.0 (voor alle) of een specifiek adres.

Database server herstarten, en opnieuw proberen.

Het antwoord is veranderd naar:

cybr@achel:~> mysql -u copyleftboardRW -h zundert.mylab.loc -p
Enter password:
ERROR 1130 (HY000): Host '192.168.1.205' is not allowed to connect to this MySQL server

2. Host is not allowed: gebruikers en rechten

Voeg nu het ip adres toe bij de user (bv met phpMyAdmin)

 	Gebruiker 	Machine 	Wachtwoord 	Globale rechten 	Gebruikersgroep 	Toekennen 	Actie
 	copyleftboardRW 	achel.mylab.loc 	Ja 	USAGE 		Nee

of als via de naam niet werkt, ip-adres:

 	Gebruiker 	Machine 	Wachtwoord 	Globale rechten 	Gebruikersgroep 	Toekennen 	Actie
 	copyleftboardRW 	192.168.1.205 	Ja 	USAGE 		Nee

Heel ruim: alle adressen

 	Gebruiker 	Machine 	Wachtwoord 	Globale rechten 	Gebruikersgroep 	Toekennen 	Actie
 	copyleftboardRW 	% 	Ja 	USAGE 		Nee

Rechten bewerken:

Achteraan bij gebruiker 'copyleftboardRW'@'achel.mylab.loc' "Rechten wijzigen"

en expliciet rechten geven op bepaalde databanken.

Rechten herladen (nl-talige phpmyadmin: “de rechtentabel vernieuwen” )

Ok.

29/3/2023

Tijd en tijdzone op een Linux server (en desktop pc)

Filed under: — cybrarian @ 2:39 pm

Server1

~ # timedatectl
Local time: wo 2023-03-29 15:32:26 CEST
Universal time: wo 2023-03-29 13:32:26 UTC
RTC time: wo 2023-03-29 13:32:26
Time zone: Europe/Brussels (CEST, +0200)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no

Deze server draait Suse:
~ # cat /etc/os-release
NAME="openSUSE Leap"
VERSION="15.4"
ID="opensuse-leap"
ID_LIKE="suse opensuse"
VERSION_ID="15.4"
PRETTY_NAME="openSUSE Leap 15.4"

Server2

~# timedatectl
Failed to get D-Bus connection: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory

maar wel:
:~# cat /etc/timezone
Europe/Brussels

Dit is een Debian:
~# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux jessie/sid"
NAME="Debian GNU/Linux"
ID=debian

Een server die hierop draait (mariadb, ..) zal normaal deze tijdzone volgen; dwz dat een datum/tijd volgens deze tijdzone wordt bewaard.
Maar als een applicatie UTC gebruikt, krijg je mogelijk een verschil van een (paar) uur…

14/2/2023

OpenSUSE 15.4 mariadb server bereikbaar maken

Filed under: — cybrarian @ 3:47 pm

Via zypper mariadb als database geïnstalleerd.

De database kan gestart worden met systemctl start mysql

Ik heb via zypper geprobeerd phpMyAdmin bij te installeren, maar is nog niet beschikbaar/aktief.

Bereikbaarheid
Can't connect to server on ...
no route to host..

Eerst de database naar buiten beschikbaar maken:

Zet firewall open voor mysql:

– in Yast, security/users, firewall, Zones public:
Services: mysql, Add -> Allowed (naast dhcpv6-client en ssh)
(bij ports staan al 80 en 443 omdat ik apache2 heb geïnstalleerd en werkt)
– in yast bewaren met Accept, en afsluiten (gaat onmiddellijk in).

nc -v server.bremen.loc 3306

nc: connect to server.bremen.loc port 3306 (tcp) failed: Connection refused

systemctl stop mysql

Configuratiebestand mariadb/mysql: /etc/my.cnf
zoek:

bind-address=127.0.0.1

Afzetten:
# bind-address=127.0.0.1 (met comment ervoor)
(of bind-address = * (??)

Bewaar, herstart mysql/mariadb met systemctl start mysql

nc -v server.bremen.loc 3306

Connection to server.bremen.loc 3306 port [tcp/mysql] succeeded!
H�jHost ‘192.168.1.05’ is not allowed to connect to this MariaDB server

Om in te loggen moet er natuurlijk een geschikte user zijn gemaakt in mariadb.

CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY 'XXXXXXXXXXXXXXXXXX'
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION;
flush privileges;

6/1/2023

MariaDb phpMyAdmin privileges foutmelding: Illegal mix of collations

Filed under: — cybrarian @ 2:49 pm

Op mijn laptop (opensuse 15.3, mariadb), in phpMyAdmin, bij het kiezen van de privileges
krijg ik een foutmelding:

#1267 – Illegal mix of collations (utf8mb4_general_ci,COERCIBLE) and (utf8mb4_unicode_ci,COERCIBLE) for operation ‘<>‘

Hier (2) vond ik een beschrijvnig:

Ik zie in Server:localhost, Settings, Features, Databases:

http://localhost/phpMyAdmin/prefs_forms.php?form=Features#tab_Databases

Server connection collation:
utf8mb4_unicode_ci

Verander utf8mb4_unicode_ci naar utf8mb4_general_ci.

Daarna kan ik weer de privileges opvragen en bewerken..

Ok!

ps: op een andere computer met Nederlandstalige desktop heb ik dat probleem niet ondanks dat daar ook die unicode versie ingesteld is.

Links:
(1) http://localhost/phpMyAdmin/server_privileges.php?db=mysql&table=global_priv&checkprivsdb=mysql&checkprivstable=global_priv&viewing_mode=table
(2) https://www.iwally.nl/1267-illegal-mix-of-collations-utf8mb4-general-ci-coercible-and-utf8mb4-unicode-ci-coercible-for-operation

16/11/2022

SQL opvraging over verschillende databanken

Filed under: — cybrarian @ 9:43 am

Ja, je kan in 1 sql-statement een opvraging van verschillende databanken combineren (als je er toegang toe hebt met je account).

SELECT db1.table1.*, db2.table2.name FROM db1.table1, db2.table2 WHERE db2.table2.id=db1.table1.external_id

Je kan verschillende rechten hebben op de databases; bv op de ene tabel lees-wijzig-invoeg rechten, en op de andere alleen leesrechten.

Toepassing: database user planktonalfheim heeft enkel leesrecht op Alfheim2.application om de naam op te zoeken:

REVOKE ALL PRIVILEGES ON `Alfheim2`.* FROM 'planktonalfheim'@'localhost'; GRANT SELECT ON `Alfheim2`.* TO 'planktonalfheim'@'localhost';
REVOKE ALL PRIVILEGES ON `plankton`.* FROM 'planktonalfheim'@'localhost'; GRANT SELECT, INSERT, UPDATE, DELETE ON `plankton`.* TO 'planktonalfheim'@'localhost';

MariaDbServer
* Alfheim2

  • application
    – id
    – name

* plankton

  • issue
    – id
    – description
    – isactive
    – application_id

SELECT plankton.issue.*, Alfheim2.application.name FROM plankton.issue, Alfheim2.application WHERE plankton.issue.isactive=1 AND Alfheim2.application.id=plankton.issue.application_id

25/10/2022

Mysql/Mariadb, phpMyAdmin: Illegal mix of collations

Filed under: — cybrarian @ 12:38 pm

De LAMP server draait MariaDb, gebruiker heeft toegang met phpMyAdmin vanop dezelfde machine.

Bij het opvragen van de “privileges” in phpMyAdmin (url: hieronder)…
http://localhost/phpMyAdmin/server_privileges.php?db=mysql&table=user&checkprivsdb=mysql&checkprivstable=user&viewing_mode=table

…krijg ik volgende foutmelding:

#1267 – Illegal mix of collations (utf8mb4_general_ci,COERCIBLE) and (utf8mb4_unicode_ci,COERCIBLE) for operation ‘<>‘
Current selection does not contain a unique column. Grid edit, Edit, Copy and Delete features may result in undesired behavior. Documentation

Ik ga deze oplossing uitproberen als ik tijd heb:
(stackoverflow)

31/5/2022

Databank structuur versie bijhouden in databank?

Filed under: — cybrarian @ 6:50 pm

Database versioning. Brainstorm.

Ontwerp
Ik maak een applicatie (bv in Gambas3), en gebruik een mariadb databank om de gegevens op te slaan.
Ik exporteer de structuur en bewaar die mee in de broncode om dat databank terug op te kunnen bouwen.
De vorige wordt overschreven, alleen de huidige, bij de software passende versie databank.sql wordt hier bewaard. Door het versiebeheersysteem (Git), kan je teruggaan naar oudere software versies, en dan heb je daar ook altijd de bijpassende databank struktuur bij.

Verandering
Als er een verandering gebeurt aan de code en aan de “database structure”, moet ik ergens kunnen bijhouden welke versie van de database struktuur dit is (zeker als mogelijk verschillende applicaties of versies van software gebruikt worden om die aan te spreken).

Een logische plaats zou zijn: in de database zelf.

De wijziging aan de database moet kunnen gedetecteerd worden door de software; en als maar 1 software die databank gebruikt, zou de software die ook (automatisch) kunnen aanpassen/opwaarderen, of de juiste aanpassing kunnen suggereren.
Upgrade/Downgrade: als er een upgrade script is, ook een downgrade script voor ingeval onverwachte problemen (in productie).

Het zou goed zijn als de toepassing de databank struktuur checkt bij het opstarten, dan kan er geen te oude code draaien met een niet meer kloppende nieuwere versie van de databank.

De software moet dus ook weten voor welke versie van databank ze gemaakt is; bv met een constante gedefinieerd in Main “dBVersion = 10”.

Als er een “library” gebruikt wordt om de database te benaderen kan dat daarin.

Vorm
Hoe gedetailleerd moet de database struktuur versienummering zijn?
bv:
Db is aangemaakt, is versie 1, Db v1
Db is aangepast, extra tabel, Db v 2
Db heeft extra index gekregen, Db v2.1
Nog een extra index gekregen, Db v2.2
Extra velden in tabel, Db v 3.0
Extra velden krijgen index, Db v 3.1
Tabel bijgemaakt, Db v 4.0
Velden bijgemaakt daarin, Db v 5.0
Nog een tabel extra Db v6.0

De hoofdversie vereist overeenkomstige wijziging aan de code die de data gebruikt.
Een minor versienummer levert bv een praktische versnelling op, maar geen code wijziging?

Waarschuwing
– major versienummer verschil: waarschuwing en afsluiten/readonly (?).
– minor versienummer verschil: waarschuwing en verderwerken.

Bij major aanpassing:
– telkens de database structuur bij de broncode, dan kan in principe vanaf die struktuur vertrokken worden bij nieuwe installatie van het geheel (dus ook nieuwe databank).
– de code om de database op deze stand te brengen vanuit de vorige toestand.
Dus bij de developer moet de database-wijziging gebeuren met code, dezelfde die mee geleverd wordt als upgrade code voor de gebruiker. Dat zal niet altijd kunnen, als er dingen uitgeprobeerd worden bij development; maar uiteindelijk moet de developer dan toch de vorige volle versie terugzetten en een upgrade script maken tot de gewenste toestand.

Bij minor aanpassing:
– telkens de database structuur bij de broncode, blijft.
– ook deze aanpassing als code meeleveren.

History?
– in database een history bijhouden van in gebruik geweeste versienummers, met datum, updaternaam enz.

Best eens een test maken om dat uit te proberen…

29/4/2022

Datums meenemen bij scp

Filed under: — cybrarian @ 9:16 am

Kopiëren van één pc/server naar andere
scp kopieert van .. naar .. over het netwerk, met encryptie (s = secure).
Je hebt het wachtwoord van de gebruiker op de andere computer nodig.

scp mapopdezecomputer/bestand.ext user@anderecomputer:/map

of van andere computer naar de huidige locatie ./ op deze computer:

scp username@andere:/map/bestand.txt ./

Bestand
Bv een configuratiebestand:

root@deze:/etc/apache2/sites-available#
scp root@andere.copyleft.loc:/etc/apache2/sites-available/copyleft.conf ./

Mappen met inhoud
van een webserver naar een andere:

root@deze:/var/www/html#
scp -r root@andere.copyleft.loc:/var/www/html/copyleft ./

Met behoud van datum

scp -rp
p van preserve: datum, tijd, mode

27/4/2022

MariaDb zonder root: en phpMyAdmin dan?

Filed under: — cybrarian @ 11:54 am

Korte versie:

Maak, als root, een phpmyadmin account met de nodige rechten:
CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY 'wachtwoord';
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Ik begon van OpenSUSE 15.3 geïnstalleerde mysql (=MariaDb):
Server version: 10.5.15-MariaDB MariaDB package

Geen root login meer?

cybrarian@MijnMachine:~> mysql -u root -p
Enter password:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Of toch?

cybrarian@MijnMachine:~> su
Password:
MijnMachine:/home/cybrarian # mysql -u root
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 23
Server version: 10.5.15-MariaDB MariaDB package
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>

MariaDB [(none)]> select Host, User, Password from mysql.user;
+-----------+-------------+----------+
| Host      | User        | Password |
+-----------+-------------+----------+
| localhost | mariadb.sys |          |
| localhost | root        | invalid  |
| localhost | mysql       | invalid  |
| localhost |             |          |

Ik lees dat ze dit veranderd hebben in versie 10.4: https://mariadb.com/kb/en/authentication-from-mariadb-104/

Dit heeft het voordeel dat de root account vanaf installatie afgeschermd is, en dat je niet hals-over-kop eerst je root account moet gaan toe-zetten, zoals vroeger.

Het root account wordt automatisch gemaakt, en je kan het gebruiken als je root bent op je systeem, ofwel met sudo.

Het test account lijkt voor iedereen open te staan nu:

cybrarian@MijnMachine:~> mysql -u test
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 16
Server version: 10.5.15-MariaDB MariaDB package
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> select CURRENT_USER();
+----------------+
| CURRENT_USER() |
+----------------+
| @localhost     |
+----------------+
1 row in set (0.001 sec)
MariaDB [(none)]> select USER();        
+----------------+
| USER()         |
+----------------+
| test@localhost |
+----------------+
1 row in set (0.000 sec)
MariaDB [(none)]> exit
Bye

met een willekeurige naam:

cybrarian@MijnMachine:~> mysql -u joskevermeulen
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 19
Server version: 10.5.15-MariaDB MariaDB package
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> select USER();        
+--------------------------+
| USER()                   |
+--------------------------+
| joskevermeulen@localhost |
+--------------------------+
1 row in set (0.001 sec)
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| test               |
+--------------------+
2 rows in set (0.001 sec)
MariaDB [(none)]> exit
Bye

Beveiligen
Het script na installatie blijft bestaan:

mysql_secure_installation

Het laat toe de root wachtwoord en login instellingen aan te passen, en eindigt met :


Remove test database and access to it? [Y/n]
– Dropping test database…
… Success!
– Removing privileges on test database…
… Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n]
… Success!

Cleaning up…

All done! If you’ve completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

en dan is:

MariaDB [(none)]> select Host, User, Password, plugin from mysql.user;
+-----------+-------------+----------+-----------------------+
| Host      | User        | Password | plugin                |
+-----------+-------------+----------+-----------------------+
| localhost | mariadb.sys |          | mysql_native_password |
| localhost | root        | invalid  | mysql_native_password |
| localhost | mysql       | invalid  | mysql_native_password |
+-----------+-------------+----------+-----------------------+
3 rows in set (0.002 sec)

phpMyAdmin
Als je hierboven *geen* root wachtwoord hebt gezet, dan zal phpMyAdmin niet werken met root.

From mysql 5.7 and mariadb 10.4 on, one cannot use ‘root’ login with default authentication method. One solution is to create a new admin user for the database just for phpMyAdmin.

Je moet dus ofwel

  • “root” weer gaan aktiveren en er een wachtwoord aan toekennen,
  • een gebruiker bijmaken voor phpMyAdmin, om zelf mee in te loggen via phpMyAdmin.

Aangezien ze root verwijderd hebben voor een reden, en dat ook zo in de volgende versies zal zijn, leer je er beter me leven. Kies een goede naam, waarmee je zelf weet waar hij voor dient (“phpmyadmin”?), of gebruik je eigen naam bv als je jezelf vertrouwt met root rechten; beperk eventueel tot localhost.

Log in als root (of je eigen gekozen beheerdersaccount).
ps: De “whoami” van mysql? check wie je nu bent met:
SELECT CURRENT_USER();

In de tabel mysql:
CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY 'VerzinZelf1Wachtwoord';

MariaDB [(none)]> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [mysql]>CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY 'VerzinZelf1Wachtwoord';

MariaDB [mysql]> select Host, User, Password, plugin from mysql.user;

+-----------+-------------+-------------------------------------------+-----------------------+
| Host      | User        | Password                                  | plugin                |
+-----------+-------------+-------------------------------------------+-----------------------+
| localhost | mariadb.sys |                                           | mysql_native_password |
| localhost | root        | invalid                                   | mysql_native_password |
| localhost | mysql       | invalid                                   | mysql_native_password |
| localhost | phpmyadmin  | *60BE5F4C0B7FD3747C1845476CED1F220739403B | mysql_native_password |
+-----------+-------------+-------------------------------------------+-----------------------+

Helaas; ik kan nu wel inloggen in phpMyAdmin, maar ik zie geen tabellen, ik kan niets doen.
Nog rechten toekennen aan de nieuwe gebruiker:

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION;
Query OK, 0 rows affected (0.004 sec)

en de rechten herladen:

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.001 sec)

Hallo phpMyAdmin!

6/4/2022

Spreken met Linux

Filed under: — cybrarian @ 11:43 pm

Altijd leuk om een langdurig backupscript van een server zelf zijn einde te laten aankondigen.
Of je laptop die je erop wijst dat je lang genoeg gewerkt hebt vanuit een script dat je inlogtijd monitort.
Of iets met je domotica.

Ubuntu
spd-say
(was standaard aanwezig in mijn 18.04 LTS, weet niet of het ooit bij-geïnstalleerd is of werkelijk standaard is).

Vb: spd-say 'Dat is lang genoeg'
De uitspraak gebeurt met Engelstalige klanken, maar het is redelijk verstaanbaar.

Suse
espeak
Maar die is ondertussen vervangen door de “next generation” espeak-ng.

Vb: espeak-ng "tijd om te gaan slapen"
Natuurlijk ook hier Engelstalige klanken, “slapen” klinkt als “slijpen”.

Je kan er zelf natuurlijk op inspelen, en de zin opgeven met wat Engelstalige “hacks”:

espeak-ng "teight om the gahn slathpen"

Klinkt beter!

17/3/2022

cifs: mount is niet beschijfbaar

Filed under: — cybrarian @ 9:50 am

Een nieuwe installatie (openSUSE 15.3 cifs-utils 6.9-5.12.1) gaf me het probleem van het mounten van een netwerkdrive van een oudere server.
Ik had voordien al vers=1.0 moeten toevoegen om de mount nog te doen werken, maar ik merkte nu dat ik niet meer kon schrijven op de server, nog wel lezen.

sudo mount -t cifs -o rw,uid=cybrarian,username=cybrarian,password=******,vers=1.0 //server.copyleft.loc/cybrarian/ /home/cybrarian/Netwerk/

Als ik de directory listing bekijk, zie ik dat de user niet ingevuld staat met naam, maar enkel met nummer 502

ls -lFA

drwxr-xr-x+ 4 502 502 0 20 mei 2020 test/

Op https://serverfault.com zag ik een parameter die ik nog niet gebruikt had: “forceuid”.
Toegepast:

sudo mount -t cifs -o rw,uid=cybrarian,forceuid,username=cybrarian,password=******,vers=1.0 //server.copyleft.loc/cybrarian/ /home/cybrarian/Netwerk/

Werkt weer: ik kan terug schrijven op de netwerkdrive; username wordt ook weergegeven in directorylist:

drwxr-xr-x+ 4 cybrarian 502 0 20 mei 2020 test/

ps: in het script laat ik eerst de niet-connectie weergeven, en na mount de verbonden netwerkdrive:

ls -lFA ~/NetwerkU
sudo mount -t cifs -o rw,uid=cybrarian,forceuid,username=cybrarian,password=******,vers=1.0 //server.copyleft.loc/cybrarian/ /home/cybrarian/Netwerk/
ls -lFA ~/NetwerkU

26/11/2021

mariadb mysql import van commandolijn

Filed under: — cybrarian @ 2:28 pm

Een groot .sql bestand moet geïmporteerd worden in mariadb. Het is meer dan één GB groot, en ik kan het niet importeren langs phpMyAdmin.
Ik heb eerst de structuur van de databases geëxporteerd en geïmporteerd (die is kleiner, gaat wel met phpMyAdmin).

Daarna vanop de commandolijn:

mysql -u root -p DBNAAM < DBNAAM.sql

Enter password:

Het kan (na het ingeven van het wachtwoord) een paar (tientallen) minuten duren eer de import klaar is; je krijgt ondertussen geen statusinformatie (je kan wel naar je processorbelasting gaan kijken, bleef hier bv rond 10%, om dan terug te vallen op 2% als de import klaar was).

12/7/2021

Voorbeeld opensuse 15.3 fixed ip server

Filed under: — cybrarian @ 2:14 pm

De meeste systemen komen met een voorgeïnstalleerde Windows, bv 10, geînstalleerd met UEFI toestanden.

Boot
In het bios (bv ESC ingeduwd houden bij opstarten) kan je de instellingen voor het booten veranderen, en bv de UEFI Boot Sources op Disabled zetten.
Daarna USB-key met opensuse 15.3 aansluiten, ESC of F9 om boot medium te kiezen.
Kies de USB-key uit de aangeboden mogelijkeheden.

OpenSUSE
kies het toetsenbord; bv Belgisch (taal laat ik op standaard Engels staan).
Activate online repositories: No (later wel).
Installatie: “Server” of “Transactional Server” (met read-only file system; die reboot automatisch na updates, ’s nachts ergens tussen 3 en 5, maar instelbaar. Voordeel is dat je er niet zelf aan moet denken om te herstarten om de updates aktief te maken, en dat het updaten geen productieve tijd wegneemt. Wel checken wanneer je backups lopen!)

Import pu..k..: .. (HD nummer).. hier kan je waarschijnlijk voorbij zonder op te letten..

Netwerk
Probleem met instellen van netwerkgegevens en/of ip-adres:
– ping: Destination host unreachable
– network is unreachable of zoiets

systemctl status network
Toont of wicked werkt (default op Suse voor vaste computers; voor laptops is het Network Manager)
(werkt met de wicked deamon wickedd, voor systemctl start wicked of systemctl start network zie meer hier)

Voorbeeld van instellen van een server onder opensuse 15.3
met yast: System, Network Settings:
Overview – Hostname – Routing

Overview: netwerkkaart(en) zichtbaar met mac-address en device name (bv eth0/eth1), en ip-adres of not configured.
Edit of Add om te wijzigen.

– ip adres 192.168.1.123 (bij instellen kies /24 ipv /32)
(ip a controleert)

Hostname/DNS
– Static hostname “myserver”
– Set hostname via DHCP: No
– Modify dns configuration (Use default policy): Minstens invullen Name Server1: bv 192.168.1.1
– domain search – (leeg laten? locale mynetwork.loc?)

Routing
je moet niet perse als server doorsturen, maar wel je default ingeven, bv 192.168.1.1 , device: eth0, destination leeg laten.
(dan test: cat /etc/resolve.conf moet achteraan nameserver 192.168.1.1 bevatten)

Na wijzigen zeker ook herstarten om te kijken of het bij start allemaal op zijn pootjes terechtkomt.

Is de kabel ingestoken, netwerkaansluiting aktief?
ip a controleert; geeft bv down als kabel los is, “up” als kabel aangesloten is (en ververst ook bij wijziging).

26/4/2021

Top maar niet zo snel

Filed under: — cybrarian @ 10:21 pm

Ik wil proberen hoelang een open ssh verbinding open blijft, ik doe op de afstands-Linux “top”; dat geeft bovenaan links de systeemtijd weer en die bevriest als de verbinding verbroken is.

ssh user@remoteIp
****
date
top
 d
 5

Top hoeft niet zo snel te verversen, maar er is geen parameter om bij het starten een interval aan te geven.
Dat kan je wel eens top draait: tik d en je krijgt de vraag een nieuwe delay in te geven, de standaard is 3.
Je kan top verlaten met q of met ctrl-c.
Als je voordien met date de datum/tijd laat weergeven, dan kan je die terugvinden als begintijd bij het verlaten van top (scherm naar boven).

Top maar niet zo veel
top
n

geeft bv 10 enter; dan krijg je een verkorte lijst van 10 te zien

20/10/2020

mariadb of mysql databank server verbinding over netwerk

Filed under: — cybrarian @ 2:17 pm

Verbinding van buitenaf
Een databank als mysql of mariadb is standaard geïnstalleerd in OpenSUSE 15.1. Meestal met het mysql_secure_installation script, dat er voor zorgt dat de databank in een veilige toestand op de server komt (niet zoals vroeger met alles draaiend, open, zonder root wachtwoord en een bekende voorgedefinieerde gast of test account…). Je kan na de installatie vanop de eigen server (localhost) inloggen. Maar als je nu vanop afstand wil inloggen op mysql of rechtstreeks vanuit programma’s de databank wil aanspreken, moet je een paar aanpassingen doen. Hieronder enkele voor intern gebruik (in een eigen lokaal netwerk), en even situeren:

1. Installatie
2. local user
3. remote use
A. Firewall
B. listen to port
C. remote use
D. SSL tunnel/VPN

1. en 2. zijn gebeurd is het uitgangspunt.

3. remote use
3.A. Firewall
Opensuse YAST: Firewall tool, service “mysql”, in zone “public” (is bv default).

op de commandolijn:
systemctl status firewalld
(om te zien of hij draait)

firewall-cmd --list-all
toont lijst met bv:

..
services: ssh dhcpv6-client mysql
ports:

grep mysql /etc/services

toont op welke poorten de diensten zitten

grep mysql /etc/services
mysql-cluster 1186/tcp # MySQL Cluster Manager [Arjen_Lentz]
mysql-cluster 1186/udp # MySQL Cluster Manager [Arjen_Lentz]
mysql-cm-agent 1862/tcp # MySQL Cluster Manager Agent [Andrew_Morgan]
mysql-cm-agent 1862/udp # MySQL Cluster Manager Agent [Andrew_Morgan]
mysql-im 2273/tcp # MySQL Instance Manager [Petr_Chardin]
mysql-im 2273/udp # MySQL Instance Manager [Petr_Chardin]
mysql 3306/tcp # MySQL [Monty]
mysql 3306/udp # MySQL [Monty]
mysql-proxy 6446/tcp # MySQL Proxy [Kay_Roepke]
mysql-proxy 6446/udp # MySQL Proxy [Kay_Roepke]
mysqlx 33060/tcp # MySQL Database Extended Interface [Oracle_8] [Omer_BarNir]

3.B. listen to port

telnet mysql.servernaam.loc 3306

Trying 192.168.1.205…
telnet: connect to address 192.168.1.205: Connection refused

Of met nc op ip-adres of hostname als dns goed is:

nc -v 192.168.1.29 3306

nc: connect to 192.168.1.229 port 3306 (tcp) failed: No route to host

(firewall dicht?)

nc -v mysql.servernaam.loc 3306

nc: connect to mysql.servernaam.loc port 3306 (tcp) failed: Connection refused

Connection refused: waarschijnlijk is poort wel open, maar luistert de dienst niet.

Dat wordt bepaald in /etc/my.cnf
staat standaard uitgecomment:

#port = 3306

en bind-address=127.0.0.1 staat standaard aan; uit-commenten zodat hij die algemene bind netwerk doet.
bind-address=127.0.0.1

3.C. user name, ip
Gebruiker bijmaken voor gebruik vanop afstand. (voor elk ander gebruik dan root-beheer moet je een andere account maken).

CREATE USER ‘my_app_user’@’10.132.51.34’ IDENTIFIED BY ‘some-strong-password’;

In plaats van op 1 bepaald ip addres kan ook een reeks adressen gebruikt worden:
netmask IPV4: ‘my_app_user’@’10.132.51.0/255.255.255.0′
Wildcards:’my_app_user’@’%.example.com’

systemctl status mysql
systemctl restart mysql

7/9/2020

Databank lettertekenset (Collation)

Filed under: — cybrarian @ 10:59 am

Als ik in een huidige databank (mariadb) kijk met phpMyAdmin, zie ik op het hoogste niveau “databases” de namen van mijn databanken, en daarnaast de colom “Collatie”. Daar staat bij de meeste databanken utf8_general_ci. (zie ook Databank collation) Er is één uitzondering, en dat is de database “mysql” (van het systeem zelf). Die heeft als collation: “utf8mb4_general_ci”. Waarom?

Een artikel uit 2016 hier op Medium.com geeft daar een antwoord op, en als het klopt zou ik ook meestal utf8mb4 moeten gebruiken, en al mijn bestaande databanken moeten omzetten.

MariaDB is afgeleid van MySQL, en daar hebben ze ooit een zuinige vorm van Unicode tekenset gemaakt en die “utf8” genoemd. Helaas bleek die achteraf niet overeen te komen met de uitgewerkte UTF-8 standaard, en MySQL kon zijn eigen versie niet meer aanpassen omdat ze te weinig plaats hadden voorzien in hun opslagruimte daarvoor (3 bytes/letter ipv 4). Hun onvolledige “utf8” veranderen zou bestaande programma’s kunnen doen crashen, en het enige wat hen restte was een andere vorm van utf8 bij te maken: utf8mb4.

Daardoor heb je nu zowel “utf8_general_ci” als “utf8mb4_general_ci” (ook wel “Unicode UCA 4.0.0).
ps: CI staat voor Case Insensitive (niet hoofdlettergevoelig, een zoek op “Abc” levert ook “abc” op).
En ook utf8mb4_bin, utf8mb4_(taalcodes)
ps: bin = wel hoofdlettergevoelig, dus Abc en abc verschillen voor de databank.

bron: https://medium.com/@adamhooper/in-mysql-never-use-utf8-use-utf8mb4-11761243e434

26/4/2020

Delen in mijn public_html folder

Filed under: — cybrarian @ 10:29 pm

Covid-19, aan huis gekluisterd of in quarantaine, en snel wat dingen delen met je huis/kotgenoten? Daar bestaat een gemakkelijke, snelle, en Linux-vriendelijke manier voor: de map public_html.

public_html
Als Linux gebruiker zie ik in mijn “home” directory, map of folder een map “public_html” tussen de Document, Pictures enz. mappen, maar op het eerste zicht doet die map niets (of doet er niets iets met die map). public_html komt voor bij openSUSE, Debian, .. (kan een iets andere naam hebben, bv www, …).

Ze is bedoeld om bestanden te delen op een manier dat een webserver dat doet. Je kan er:
– gewoon bestanden in zetten om te laten downloaden of bekijken.
– een index pagina maken en het gebruiken als een soort persoonlijke website.

Webserver
Deze map wordt gebruikt door de webserver, die moet je dus installeren indien nog niet gebeurd.
Hij moet ook aktief zijn. Op een webserver is die normaal aktief, op je pc/laptop zal je die alleen aktiveren indien nodig.
Als de webserver (Apache) draait, en daarvoor is ingesteld (wat standaard zo zou kunenn zijn), dan gaat hij voor alle gebruikers, hier één voorgesteld door “cybrarian”, kijken in de map
/home/cybrarian/public_html
en die weergeven in bv Firefox aan de gebruikers van de webserver.

Zelf:
file:///home/cybr/public_html

Lokaal:
die directory weergeven aan andere gebruikers op diezelfde server die de site van die gebruiker opvragen op de manier:
http://localhost/~cybrarian/

Netwerk:
Stel dat de server het ip adres 192.168.1.67 heeft dan kunnen gebruikers binnen het eigen lokale netwerk de pagina’s opvragen met:
http://192.168.1.167/~cybrarian/

Hosting:
Ook bij hosting kan dit scenario voorkomen. De URL om de pagina’s op te vragen zal dan de internet-URL zijn van de server (of kan misschien ook met ip-adres).

Apache maakt dit mogelijk met “mod_userdir” (http://httpd.apache.org/docs/2.4/mod/mod_userdir.html).
Instellingen van de webserver kunnen roet in het eten gooien.
Maar het is een goede, veilige manier van werken want dan kan een gebruiker eenvoudig bestanden aanbieden aan de webserver zonder dat hij rechten moet hebben om in de webserver directories wijzigingen aan te brengen.

Voorbeeld:
Op OpenSUSE waar al een databank op draaide met phpMyAdmin stond de webserver al geïnstalleerd. Na het starten met
sudo systemctl start apache2
werkte het vanzelf. Je moet er enkel op letten ook werkelijk iets in die public_html te zetten, iets anders dan een “lege” index.html (die is wel nuttig om even de inhoud van je directory te verbergen).

Powered by WordPress