Je prends des notes à l'aide de #dendron
( première Bulle à ce sujet https://liens.vincent-bonnefille.fr/?AGBhmA )
Bon, les WikiLinks c'est formidable
( Internal links : [[lien_popup_sujet]] - doc wiki )
J'appelle WikiLinks des liens internes, qui lient des pages/notes entre elles...
Comme sur #wiki quand on survol un de ces liens il affiche un popup !
Si on clique dessus, le lien ouvre la page vers laquelle cette note/lien pointe.
Trop deep
Mais, quand j'écris en #md_markdown avec #dendron ...
Je peux me retrouver avec une hiérarchie de notes assez deep (profonde)
Les liens contiennent en effet tout le chemin des sous-parties (séparées par un (.))
[[Root.sujet.partie.élément_child]]
= lien vers =>
Root > sujet > partie > élément_child
Le lien devient long
Difficile à lire
Il prend de la place dans le texte
Je voudrais qu'il prenne moins de place
( comme dans son état final, quand on "preview" le code en HTML )
: qu'il soit +lisible :
lire seulement le titre de la note/fiche ( sans le chemin entier )
EX/ [[gparent.parent.child_name]]
-> [[child_name]]
Solution : plugin
Heureusement, #vscode regorge de plugins/extensions...
vscode-inline-fold permet de rétracter ("fold") les bouts de code trop longs ...
( par exemple, on pourra réduire "fold" une chaine de classes dans un élément HTML )
Regex / préférence :
Mes préférences avec le #Regex pour les WikiLinks :
"[markdown]": {
"inlineFold.regex":"\\[\\[(([\\.A-Za-zÀ-ú0-9_\\-\\:]{1,}?)\\.)([A-Za-zÀ-ú0-9_\\-\\:]{1,}?)\\]\\]",
"inlineFold.regexFlags": "g",
"inlineFold.regexGroup": 1,
"inlineFold.unfoldedOpacity": 0.6,
"inlineFold.maskChar": "",
"inlineFold.after": "",
"inlineFold.maskColor": "#000",
"inlineFold.unfoldOnLineSelect": true,
"inlineFold.autoFold": true,
}
On peut ensuite ajouter un raccourcis pour afficher/masquer les Wikiliens...
Final #Regex
https://regex101.com/library/nlSi7u (me)
https://regex101.com/r/5R0WQ1/1 (other user)
Docker acces via SSH
Objectif :
Simplifier le développement en accédant aux fichiers de mon container #Docker via SSH
( on ouvre le container comme dans un gestionnaire de fichier )
STORY (motivation)
J'installe un nouveau #Shaarli
( autour d'un #corpus élargi ) ( qui sera privé )
Je voudrais suivre la branche Master du projet Shaarli
( {ici} j'ai bifurqué pour ajouter quelles fonctionnalités )
( {ici} j'ai ajouté un champ pour l'aperçu illustrant chaque {bulle} )
( l'image à gauche... car parfois Shaarli n'en trouve pas dans la page/lien )
Ajout de champ
Dans la nouvelle version je veux ajouter le même champ
... en suivant la documentation : edit_link_plugin
En faisant mes propres recherches...
je m'aperçois que le plugin Démo nous montre la voie :
- https://github.com/shaarli/Shaarli/tree/master/plugins/demo_plugin
( après, intégrer par moi-même un field.champ n'avait pas été compliqué )
( la Démo nous montre comment l'ajouter + enregistrer -pas comment l'intégrer )
Bug
Malheureusement, dans la nouvelle version de #shaarli il y a un bug...
- https://github.com/shaarli/Shaarli/issues/2000
- https://github.com/shaarli/Shaarli/issues/1808 )
qui fait que l'ajout de champ + récupération des données ne marche pas...
( ... c'est bien la peine que je mette en place un accès à mon #Docker #SSH en local )
Docker
Du coup je repars sur une version Docker
Et pour faire ça (mes modifs / ajouts)..
je vais vouloir interagir avec le contenu de container de façon fluide.
. La technique "normale" consiste à récupérer un fichier dans le Container
. L'éditer
. et le remettre...
. . cela me semble fastidieux...
Du coup, j'ai envie de tester avec #SSH !
Pour cela le container doit faire tourner SSH
( et ses ports doivent être ouverts vers l'Host )
( Host = hôte = machine.ordi dans lequel est installé Docker qui contient le container)
( Ordi = Host > Docker > Container(s) > OS > Apps.services, ex: Shaarli )
Version courte
( open host -> docker )
sudo docker exec -it -u root DOCKER_NAME sh
( dans docker )
sleep 1
echo "--- Install stuffs"
apk update; apk add openssh-server
apk add openrc openssh
# opt
apk add --no-cache nano
apk add --no-cache bash
echo
echo "--- Generate SSH Keys" && sleep 3
mkdir -p /root/.ssh
chmod 0700 /root/.ssh
ssh-keygen -A
echo
echo "--- allow ROOT Authentification" && sleep 3
echo " " >> /etc/ssh/sshd_config
echo " " >> /etc/ssh/sshd_config
echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config
echo "PermitEmptyPasswords yes" >> /etc/ssh/sshd_config
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
echo
sleep 1
echo "--- creat ROOT password"
passwd
echo "\n------- ALL CONFIGURED ==> reStart \n"
echo
echo "--- reSTART sshd, can be long" && sleep 3
rc-status
touch /run/openrc/softlevel
/etc/init.d/sshd restart
( ok, on exit du Docker_Container )
( on chope son IP, on s'y connecte en SSH )
echo "---- You can exit"
exit
echo "\n------- HOWTO CONNECT \n"
echo
echo "then get Container IP"
echo "D_NAME == Container Name"
echo "docker container inspect -f '{{ .NetworkSettings.Networks.shaarli_default.IPAddress }}' D_NAME"
echo
echo "---- Then connect"
ssh root@172.17.0.X -p 22
Marche à suivre (notes installation)
SOURCES
- https://dev.to/yakovlev_alexey/running-ssh-in-an-alpine-docker-container-3lop
- https://techoverflow.net/2021/05/17/how-to-enable-ssh-root-login-on-alpine-linux/
DOCKERFILE
( ex. instructions - shot version )
- https://gdevillele.github.io/engine/examples/running_ssh_service/
- https://stackoverflow.com/a/68302177
PORT forward
( Port SSH par défaut : 22 )
( Connexion Host -> Docker )
0.0.0.0:2222 22/tcp
! at dock creation
--publish 8800:80 --publish 2222:22
Go into Docker Container
( where to install ssh-serveur access )
( on pourra aussi créer un nouvel utilisateur non root )
docker exec -it -u root D_CONTAINER_NAME sh
INSTALL d'app/services via APK (Alpine)
apk update
apk add openssh-server
apk add openrc openssh
Optionnel
apk add nano
apk add bash
INIT CONFIG SSH
mkdir -p /root/.ssh
chmod 0700 /root/.sshssh-keygen -A
rc-status
touch /run/openrc/softlevel
/etc/init.d/sshd start
SET PWD (root)
passwd
passwd -u root # <- UNSET = null
Allow Host SSH->Container connexion
( default user is root )
( here we allow for root, not most secure )
( ... you can creat a new user if needed )
For Root user :
nano /etc/ssh/sshd_config
PermitRootLogin yes
authentification w/ pwd
PasswordAuthentication yes
PermitEmptyPasswords yes
... THEN on redémarre le service SSH
... pour qu'il fonctionne avec nos nouveaux paramètres
service sshd restart
CONNECTION
GET CONTEINER IP
( into docker > sh/bash )
ifconfig
( or outside, from host )
sudo docker container inspect shaarli_e2jk | grep -i IPAddress
( or )
docker container inspect -f '{{ .NetworkSettings.Networks.shaarli_default.IPAddress }}' D_NAME
FINALY : CONNECT
ssh root@172.21.0.2 -p 22
PASSWORD
AUTOreSTART - OPENRC
- https://docs.alpinelinux.org/user-handbook/0.1a/Working/openrc.html
- https://www.linuxtricks.fr/wiki/openrc-les-commandes-essentielles (FR)
- https://wiki.gentoo.org/wiki/OpenRC_to_systemd_Cheatsheet
- https://www.cyberciti.biz/faq/how-to-enable-and-start-services-on-alpine-linux/
ex
Status
service sshd status
Redémarrer
service sshd restart
-- auto-restart (on host restart)
( rc-update add <service> <runlevel> )
rc-update add sshd
( not working for me )
-> temp. solution
sudo docker restart D_NAME
sudo docker inspect D_NAME -f "{{json .NetworkSettings.Networks.bridge.IPAddress }}"
AUTRES PISTES
C to C
MAJ #2024
Installation de Baikal qui est bien plus complet dans la gestion d'utilisateur.ices / calendriers... UI plus compète.
Un bon tuto, memes conclusions vàv de /NextCloud/
https://nicolasforcet.com/baikal-liberez-vous-de-google-avec-ce-tout-petit-serveur-de-calendrier-caldav/
Story
J'ai installé un service de calendrier / tâches / listes ( et contacts ) : /Raicale/ !
Lire les buts / motivations de ce dev. (en anglais) :
J'aime bien :
- le logo
- le jeu de mot
cal comme dans calendrier
cal comme dans /webcal/
cal comme dans /Radicale/ !
+Léger qu'un /NextCloud/ mais sans interface web (GUI)
+Centré sur les Calendriers+Carnet d'adresses !
+Tourne vite, s'installe vite (python)
+Gestion simple d'Utilisateur.ices à la main (bash-cli)
+URL d'abonnement auto-générée
Compatibilité
Android
Marche super avec https://f-droid.org/packages/at.bitfire.davdroid
Autres
Testé via GoogleAgenda / AppleCalendar (OS 10.10) / Gnome Agenda / Thunderbird : OK
iPad ?
dommage, j'ai pas réussi à interagir depuis l'iPad à jour
Finalement ca marche
-> $URL/$USER/ = ok
( oui c'est un projet familiale, )
( et la mif' est sur des systèmes mentalement clos )
Extras
Quelques Plugins à test #todo
Alternativeto
Une alternative avec + de fonctions + GUI
/Wetty/ sert à accéder à un terminal de commandes ( #cli_bash ) via le protocole #SSH ...
mais en passant par le wwweb (via n'importe quel #navigateur ) !
Normalement on se connect avec le protocole #SSH via un terminal (application)
ssh user@adresse_du_serveur_ou_son_IP
<
Sur un wifi public (ou protégé) certain #admin empêchent l'accès au port :22
(SSH)
Aussi, en passant par le web ( port :80
) on peut contourner cette limitation...
Pratique quand on veut accéder sans délais à son serveur distant !
- https://computingforgeeks.com/run-linux-terminal-on-web-browser-using-wetty/
Full #tuto - https://distroid.net/linux-terminal-using-wetty/
. . .
En remplaçant de /Shell in a box/ ( discontinued )