Jekyll2024-11-21T17:12:47+01:00https://static.rnmkcy.eu/feed.xmlYannStaticExpérimentations et tests Lynis pour auditer et renforcer la sécurité des systèmes basés sur Linux2024-11-09T00:00:00+01:002024-11-09T00:00:00+01:00https://static.rnmkcy.eu/2024/11/09/Lynis Audit en cours... {% highlight text %} [...] [+] Initializing program ------------------------------------ - Detecting OS... [ DONE ] - Checking profiles... [ DONE ] - Detecting language and localization [ fr ] --------------------------------------------------- Program version: 3.1.3 Operating system: Linux Operating system name: Debian Operating system version: 12 Kernel version: 6.1.0 Hardware platform: x86_64 Hostname: rnmkcy --------------------------------------------------- Profiles: /home/leno/scripts/lynis/default.prf Log file: /var/log/lynis.log Report file: /var/log/lynis-report.dat Report version: 1.0 Plugin directory: ./plugins --------------------------------------------------- Auditor: [Not Specified] Language: fr Test category: all Test group: all --------------------------------------------------- - Program update status... [ PAS DE MISE A JOUR ] [...] {% endhighlight %} Lynis utilise des codes de couleur pour souligner l’importance des résultats. Par exemple, le rouge indique un problème critique, tandis que le jaune signale des avertissements. ### Analyse du score de l’audit Le score de l’audit Lynis est une mesure quantitative qui reflète l’état de sécurité de votre système. À la fin de chaque audit, Lynis attribue un score, exprimé en pourcentage, qui évalue la robustesse de votre configuration de sécurité. Ce score est calculé en fonction de divers facteurs, tels que les vulnérabilités détectées, les configurations de sécurité non optimales et les bonnes pratiques en matière de sécurité qui sont déjà en place. ![](/images/lynis01.png) Un score élevé indique que votre système est bien configuré et qu’il respecte de nombreuses bonnes pratiques de sécurité. Cela signifie que Lynis a trouvé moins de problèmes et de vulnérabilités et que les mesures de sécurité importantes sont déjà en place. Inversement, un score bas suggère que des améliorations significatives sont nécessaires pour renforcer la sécurité de votre système. Il indique généralement la présence de nombreuses vulnérabilités ou de configurations de sécurité inadéquates. Il est important d’utiliser le score de l’audit comme un indicateur de progression dans vos efforts de sécurisation. Après avoir apporté des changements recommandés par Lynis, vous devriez ré-exécuter l’outil pour voir si vos actions ont conduit à une amélioration du score. L’augmentation du score d’un audit à l’autre est un signe positif que vous avez réussi à améliorer la sécurité de votre système. ### Analyse Détaillée des Résultats À la fin de l’audit, Lynis fournit un résumé des résultats, y compris les avertissements et suggestions. Pour chaque point soulevé, Lynis fournit des détails spécifiques sur la nature du problème ou de la suggestion. Lynis liste également les tests effectués et leurs résultats, ce qui vous aide à comprendre quels aspects de votre système ont été audités. Lynis enregistre les résultats dans des fichiers de log, généralement situés dans `/var/log/lynis.log` Chaque avertissement ou suggestion est accompagné d’un code unique (par exemple, SSH-7408) et d’un message descriptif. Ce code peut être utilisé pour rechercher des informations supplémentaires dans la documentation de Lynis ou sur internet. Recherche mot clé "Suggestion" dans le fichier log On va traiter l'amélioration du paramétrage SSH ``` [...] 2024-11-09 10:19:48 Suggestion: Consider hardening SSH configuration [test:SSH-7408] [details:AllowTcpForwarding (set YES to NO)] [solution:-] 2024-11-09 10:19:48 Suggestion: Consider hardening SSH configuration [test:SSH-7408] [details:ClientAliveCountMax (set 3 to 2)] [solution:-] 2024-11-09 10:19:48 Suggestion: Consider hardening SSH configuration [test:SSH-7408] [details:LogLevel (set INFO to VERBOSE)] [solution:-] 2024-11-09 10:19:48 Suggestion: Consider hardening SSH configuration [test:SSH-7408] [details:MaxAuthTries (set 6 to 3)] [solution:-] 2024-11-09 10:19:48 Suggestion: Consider hardening SSH configuration [test:SSH-7408] [details:MaxSessions (set 10 to 2)] [solution:-] 2024-11-09 10:19:48 Suggestion: Consider hardening SSH configuration [test:SSH-7408] [details:TCPKeepAlive (set YES to NO)] [solution:-] 2024-11-09 10:19:49 Suggestion: Consider hardening SSH configuration [test:SSH-7408] [details:X11Forwarding (set YES to NO)] [solution:-] 2024-11-09 10:19:49 Suggestion: Consider hardening SSH configuration [test:SSH-7408] [details:AllowAgentForwarding (set YES to NO)] [solution:-] [...] ``` Les modifications des paramètres fichier /etc/ssh/sshd_config ``` LogLevel VERBOSE ClientAliveCountMax 2 MaxAuthTries 3 MaxSessions 3 TCPKeepAlive no X11Forwarding no ``` Redémarrer le service sudo systemctl restart sshd Créer un profile `lenovo.prf` à partir de `default.prf` et modification pour désactiver des tests
lenovo.prf {% highlight text %} ################################################################################# # # # Lynis - Default scan profile # # ################################################################################# # # # This profile provides Lynis with most of its initial values to perform a # system audit. # # # WARNINGS # ---------- # # Do NOT make changes to this file. Instead, copy only your changes into # the file custom.prf and put it in the same directory as default.prf # # To discover where your profiles are located: lynis show profiles # # # Lynis performs a strict check on profiles to avoid the inclusion of # possibly harmful injections. See include/profiles for details. # # ################################################################################# # # All empty lines or with the # prefix will be skipped # ################################################################################# # Use colored output colors=yes # Compressed uploads (set to zero when errors with uploading occur) compressed-uploads=yes # Amount of connections in WAIT state before reporting it as a suggestion #connections-max-wait-state=5000 # Debug mode (for debugging purposes, extra data logged to screen) #debug=yes # Show non-zero exit code when warnings are found error-on-warnings=no # Use Lynis in your own language (by default auto-detected) language= # Log tests from another guest operating system (default: yes) #log-tests-incorrect-os=yes # Define if available NTP daemon is configured as a server or client on the network # values: server or client (default: client) #ntpd-role=client # Defines the role of the system (personal, workstation or server) machine-role=server # Ignore some stratum 16 hosts (for example when running as time source itself) #ntp-ignore-stratum-16-peer=127.0.0.1 # Profile name, will be used as title/description profile-name=Default Audit Template # Number of seconds to pause between every test (0 is no pause) pause-between-tests=0 # Quick mode (do not wait for keypresses) quick=yes # Refresh software repositories to help detecting vulnerable packages refresh-repositories=yes # Show solution for findings show-report-solution=yes # Show inline tips about the tool show-tool-tips=yes # Skip plugins skip-plugins=no # Skip a test (one per line) skip-test=NETW-3015 skip-test=STRG-1930 skip-test=BOOT-5122 skip-test=BOOT-5264 skip-test=KRNL-5820 skip-test=AUTH-9230 skip-test=AUTH-9262 skip-test=AUTH-9282 skip-test=AUTH-9284 skip-test=AUTH-9286 skip-test=AUTH-9286 skip-test=AUTH-9328 skip-test=FILE-6310 skip-test=FILE-6310 skip-test=USB-1000 skip-test=STRG-1846 skip-test=NAME-4404 skip-test=PKGS-7346 skip-test=PKGS-7370 skip-test=PKGS-7392 skip-test=PKGS-7394 skip-test=PKGS-7410 skip-test=PKGS-7420 skip-test=NETW-3200 skip-test=NETW-3200 skip-test=NETW-3200 skip-test=NETW-3200 skip-test=FIRE-4513 skip-test=HTTP-6710 skip-test=HTTP-6712 skip-test=SSH-7408 skip-test=SSH-7408 skip-test=SSH-7408 skip-test=DBS-1884 skip-test=DBS-1886 skip-test=PHP-2376 skip-test=LOGG-2154 skip-test=LOGG-2190 skip-test=BANN-7126 skip-test=BANN-7130 skip-test=ACCT-9622 skip-test=ACCT-9626 skip-test=ACCT-9628 skip-test=CRYP-7902 skip-test=FINT-4350 skip-test=TOOL-5002 skip-test=FILE-7524 skip-test=KRNL-6000 skip-test=HRDN-7222 skip-test=HRDN-7230 # Skip a particular option within a test (when applicable) #skip-test=SSH-7408:loglevel #skip-test=SSH-7408:permitrootlogin # Skip Lynis upgrade availability test (default: no) #skip-upgrade-test=yes # Locations where to search for SSL certificates (separate paths with a colon) ssl-certificate-paths=/etc/apache2:/etc/dovecot:/etc/httpd:/etc/letsencrypt:/etc/pki:/etc/postfix:/etc/refind.d/keys:/etc/ssl:/opt/psa/var/certificates:/usr/local/psa/var/certificates:/usr/local/share/ca-certificates:/usr/share/ca-certificates:/usr/share/gnupg:/var/www:/srv/www ssl-certificate-paths-to-ignore=/etc/letsencrypt/archive: ssl-certificate-include-packages=no # Scan type - how deep the audit should be (light, normal or full) test-scan-mode=full # Verbose output verbose=no ################################################################################# # # Plugins # --------------- # Define which plugins are enabled # # Notes: # - Nothing happens if plugin isn't available # - There is no order in execution of plugins # - See documentation about how to use plugins and phases # - Some are for Lynis Enterprise users only # ################################################################################# # Lynis plugins to enable plugin=authentication plugin=compliance plugin=configuration plugin=control-panels plugin=crypto plugin=dns plugin=docker plugin=file-integrity plugin=file-systems plugin=firewalls plugin=forensics plugin=hardware plugin=intrusion-detection plugin=intrusion-prevention plugin=kernel plugin=malware plugin=memory plugin=nginx plugin=pam plugin=processes plugin=security-modules plugin=software plugin=system-integrity plugin=systemd plugin=users plugin=krb5 # Disable a particular plugin (will overrule an enabled plugin) #disable-plugin=authentication ################################################################################# # # Kernel options # --------------- # config-data=, followed by: # # - Type = Set to 'sysctl' # - Setting = value of sysctl key (e.g. kernel.sysrq) # - Expected value = Preferred value for key (e.g. 0) # - Hardening Points = Number of hardening points (typically 1 point per key) (1) # - Description = Textual description about the sysctl key(Disable magic SysRQ) # - Related file or command = For example, sysctl -a to retrieve more details # - Solution field = Specifies more details or where to find them (url:URL, text:TEXT, or -) # ################################################################################# # Config # - Type (sysctl) # - Setting (kernel.sysrq) # - Expected value (0) # - Hardening Points (1) # - Description (Disable magic SysRQ) # - Related file or command (sysctl -a) # - Solution field (url:URL, text:TEXT, or -) # Processes config-data=sysctl;security.bsd.see_other_gids;0;1;Groups only see their own processes;sysctl -a;-;category:security; config-data=sysctl;security.bsd.see_other_uids;0;1;Users only see their own processes;sysctl -a;-;category:security; config-data=sysctl;security.bsd.stack_guard_page;1;1;Enable stack smashing protection (SSP)/ProPolice to defend against possible buffer overflows;-;category:security; config-data=sysctl;security.bsd.unprivileged_proc_debug;0;1;Unprivileged processes can not use process debugging;sysctl -a;-;category:security; config-data=sysctl;security.bsd.unprivileged_read_msgbuf;0;1;Unprivileged processes can not read the kernel message buffer;sysctl -a;-;category:security; # Kernel config-data=sysctl;fs.suid_dumpable;0;1;Restrict core dumps;sysctl -a;url:https;//www.kernel.org/doc/Documentation/sysctl/fs.txt;category:security; config-data=sysctl;fs.protected_fifos;2;1;Restrict FIFO special device creation behavior;sysctl -a;url:https;//www.kernel.org/doc/Documentation/sysctl/fs.txt;category:security; config-data=sysctl;fs.protected_hardlinks;1;1;Restrict hardlink creation behavior;sysctl -a;url:https;//www.kernel.org/doc/Documentation/sysctl/fs.txt;category:security; config-data=sysctl;fs.protected_regular;2;1;Restrict regular files creation behavior;sysctl -a;url:https;//www.kernel.org/doc/Documentation/sysctl/fs.txt;category:security; config-data=sysctl;fs.protected_symlinks;1;1;Restrict symlink following behavior;sysctl -a;url:https;//www.kernel.org/doc/Documentation/sysctl/fs.txt;category:security; #config-data=sysctl;kern.randompid=2345;Randomize PID numbers with a specific modulus;sysctl -a;-;category:security; config-data=sysctl;kern.sugid_coredump;0;1;No description;sysctl -a;url:https;//kernel.org/doc/Documentation/sysctl/kernel.txt;category:security; config-data=sysctl;kernel.core_setuid_ok;0;1;No description;sysctl -a;url:https;//kernel.org/doc/Documentation/sysctl/kernel.txt;category:security; config-data=sysctl;kernel.core_uses_pid;1;1;No description;sysctl -a;url:https;//kernel.org/doc/Documentation/sysctl/kernel.txt;category:security; config-data=sysctl;kernel.ctrl-alt-del;0;1;No description;sysctl -a;url:https;//kernel.org/doc/Documentation/sysctl/kernel.txt;category:security; config-data=sysctl;kernel.dmesg_restrict;1;1;Restrict use of dmesg;sysctl -a;url:https;//kernel.org/doc/Documentation/sysctl/kernel.txt;category:security; config-data=sysctl;kernel.exec-shield-randomize;1;1;No description;sysctl -a;url:https;//kernel.org/doc/Documentation/sysctl/kernel.txt;category:security; config-data=sysctl;kernel.exec-shield;1;1;No description;sysctl -a;url:https;//kernel.org/doc/Documentation/sysctl/kernel.txt;category:security; config-data=sysctl;kernel.kptr_restrict;2;1;Restrict access to kernel symbols;sysctl -a;url:https;//kernel.org/doc/Documentation/sysctl/kernel.txt;category:security; config-data=sysctl;kernel.maps_protect;1;1;Restrict access to /proc/[pid]/maps;sysctl -a;url:https;//kernel.org/doc/Documentation/sysctl/kernel.txt;category:security; config-data=sysctl;kernel.modules_disabled;1;1;Restrict module loading once this sysctl value is loaded;sysctl -a;url:https;//kernel.org/doc/Documentation/sysctl/kernel.txt;category:security; config-data=sysctl;kernel.perf_event_paranoid;2|3|4;1;Restrict unprivileged access to the perf_event_open() system call.;sysctl -a;url:https;//kernel.org/doc/Documentation/sysctl/kernel.txt;category:security; config-data=sysctl;kernel.randomize_va_space;2;1;Randomize of memory address locations (ASLR);sysctl -a;url:https;//kernel.org/doc/Documentation/sysctl/kernel.txt;category:security; config-data=sysctl;kernel.suid_dumpable;0;1;Restrict core dumps;sysctl -a;url:https;//kernel.org/doc/Documentation/sysctl/kernel.txt;category:security; config-data=sysctl;kernel.sysrq;0;1;Disable magic SysRQ;sysctl -a;url:https;//kernel.org/doc/Documentation/sysctl/kernel.txt;category:security; config-data=sysctl;kernel.unprivileged_bpf_disabled;1;1;Restrict BPF for unprivileged users;sysctl -a;url:https;//kernel.org/doc/Documentation/sysctl/kernel.txt;category:security; config-data=sysctl;kernel.use-nx;0;1;No description;sysctl -a;url:https;//kernel.org/doc/Documentation/sysctl/kernel.txt;category:security; config-data=sysctl;kernel.yama.ptrace_scope;1|2|3;1;Disable process tracing for everyone;-;category:security; # Network config-data=sysctl;net.core.bpf_jit_harden;2;1;Hardened BPF JIT compilation;sysctl -a;url:https;//kernel.org/doc/Documentation/sysctl/kernel.txt;category:security; config-data=sysctl;net.inet.ip.linklocal.in.allowbadttl;0; config-data=sysctl;net.inet.tcp.always_keepalive;0;1;Disable TCP keep alive detection for dead peers as the keepalive can be spoofed;-;category:security; #config-data=sysctl;net.inet.tcp.fast_finwait2_recycle;1;1;Recycle FIN/WAIT states more quickly (DoS mitigation step, with risk of false RST);-;category:security; config-data=sysctl;net.inet.tcp.nolocaltimewait;1;1;Remove the TIME_WAIT state for loopback interface;-;category:security; config-data=sysctl;net.inet.tcp.path_mtu_discovery;0;1;Disable MTU discovery as many hosts drop the ICMP type 3 packets;-;category:security; config-data=sysctl;net.inet.icmp.bmcastecho;0;1;Ignore ICMP packets directed to broadcast address;-;category:security; config-data=sysctl;net.inet.tcp.icmp_may_rst;0;1;ICMP may not send RST to avoid spoofed ICMP/UDP floods;-;category:security; config-data=sysctl;net.inet.icmp.drop_redirect;1;1;Do not allow redirected ICMP packets;-;category:security; config-data=sysctl;net.inet.icmp.rediraccept;0;1;Disable incoming ICMP redirect routing redirects;-;category:security; config-data=sysctl;net.inet.icmp.timestamp;0;1;Disable timestamps;-;category:security; config-data=sysctl;net.inet.ip.accept_sourceroute;0;1;Disable IP source routing;-;category:security; config-data=sysctl;net.inet.ip.check_interface;1;1;Verify that a packet arrived on the right interface;-;category:security; config-data=sysctl;net.inet.ip.forwarding;0;1;Do not allow forwarding of traffic;-;category:security; config-data=sysctl;net.inet.ip.process_options;0;1;Ignore any IP options in the incoming packets;-;category:security; config-data=sysctl;net.inet.ip.random_id;1;1;Use a random IP id to each packet leaving the system;-;category:security; config-data=sysctl;net.inet.ip.redirect;0;1;Disable/Ignore ICMP routing redirects;-;category:security; config-data=sysctl;net.inet.ip.sourceroute;0;1;Disable IP source routing;-;category:security; config-data=sysctl;net.inet.ip6.redirect;0;1;Disable/Ignore ICMP routing redirects;-;category:security; config-data=sysctl;net.inet.tcp.blackhole;2;1;Do not sent RST but drop traffic when delivered to closed TCP port;-;category:security; config-data=sysctl;net.inet.tcp.drop_synfin;1;1;SYN/FIN packets will be dropped on initial connection;-;category:security; config-data=sysctl;net.inet.udp.blackhole;1;1;Do not sent RST but drop traffic when delivered to closed UDP port;-;category:security; config-data=sysctl;net.inet6.icmp6.rediraccept;0;1;Disable incoming ICMP redirect routing redirects;-;category:security; config-data=sysctl;net.inet6.ip6.forwarding;0;1;Do not allow forwarding of traffic;-;category:security; config-data=sysctl;net.inet6.ip6.fw.enable;1;1;Enable filtering;-;category:security; config-data=sysctl;net.inet6.ip6.redirect;0;1;Disable sending ICMP redirect routing redirects;-;category:security; config-data=sysctl;net.ipv4.conf.all.accept_redirects;0;1;Disable/Ignore ICMP routing redirects;-;category:security; config-data=sysctl;net.ipv4.conf.all.accept_source_route;0;1;Disable IP source routing;-;category:security; config-data=sysctl;net.ipv4.conf.all.bootp_relay;0;1;Do not relay BOOTP packets;-;category:security; config-data=sysctl;net.ipv4.conf.all.forwarding;0;1;Disable IP source routing;-;category:security; config-data=sysctl;net.ipv4.conf.all.log_martians;1;1;Log all packages for which the host does not have a path back to the source;-;category:security; config-data=sysctl;net.ipv4.conf.all.mc_forwarding;0;1;Disable IP source routing;-;category:security; config-data=sysctl;net.ipv4.conf.all.proxy_arp;0;1;Do not relay ARP packets;-;category:security; config-data=sysctl;net.ipv4.conf.all.rp_filter;1;1;Enforce ingress/egress filtering for packets;-;category:security; config-data=sysctl;net.ipv4.conf.all.send_redirects;0;1;Disable/Ignore ICMP routing redirects;-;category:security; config-data=sysctl;net.ipv4.conf.default.accept_redirects;0;1;Disable/Ignore ICMP routing redirects;-;category:security; config-data=sysctl;net.ipv4.conf.default.accept_source_route;0;1;Disable IP source routing;-;category:security; config-data=sysctl;net.ipv4.conf.default.log_martians;1;1;Log all packages for which the host does not have a path back to the source;-;category:security; config-data=sysctl;net.ipv4.icmp_echo_ignore_broadcasts;1;1;Ignore ICMP packets directed to broadcast address;-;category:security; config-data=sysctl;net.ipv4.icmp_ignore_bogus_error_responses;1;1;Ignore-;category:security; #config-data=sysctl;net.ipv4.ip_forward;0;1;Do not forward traffic;-;category:security; config-data=sysctl;net.ipv4.tcp_syncookies;1;1;Use SYN cookies to prevent SYN attack;-;category:security; config-data=sysctl;net.ipv4.tcp_timestamps;0|1;1;Disable TCP time stamps or enable them with different offsets;-;category:security; config-data=sysctl;net.ipv6.conf.all.send_redirects;0;1;Disable/ignore ICMP routing redirects;-;category:security; config-data=sysctl;net.ipv6.conf.all.accept_redirects;0;1;Disable/Ignore ICMP routing redirects;-;category:security; config-data=sysctl;net.ipv6.conf.all.accept_source_route;0;1;Disable IP source routing;-;category:security; config-data=sysctl;net.ipv6.conf.default.accept_redirects;0;1;Disable/Ignore ICMP routing redirects;-;category:security; config-data=sysctl;net.ipv6.conf.default.accept_source_route;0;1;Disable IP source routing;-;category:security; # Other config-data=sysctl;dev.tty.ldisc_autoload;0;1;Disable loading of TTY line disciplines;-;category:security; config-data=sysctl;hw.kbd.keymap_restrict_change;4;1;Disable changing the keymap by non-privileged users;-;category:security; #sysctl;kern.securelevel;1^2^3;1;FreeBSD security level; #security.jail.jailed; 0 #security.jail.jail_max_af_ips; 255 #security.jail.mount_allowed; 0 #security.jail.chflags_allowed; 0 #security.jail.allow_raw_sockets; 0 #security.jail.enforce_statfs; 2 #security.jail.sysvipc_allowed; 0 #security.jail.socket_unixiproute_only; 1 #security.jail.set_hostname_allowed; 1 #security.bsd.suser_enabled; 1 #security.bsd.unprivileged_proc_debug; 1 #security.bsd.conservative_signals; 1 #security.bsd.unprivileged_read_msgbuf; 1 #security.bsd.unprivileged_get_quota; 0 config-data=sysctl;security.bsd.hardlink_check_gid;1;1;Unprivileged processes are not allowed to create hard links to files which are owned by other groups;-;category:security; config-data=sysctl;security.bsd.hardlink_check_uid;1;1;Unprivileged processes are not allowed to create hard links to files which are owned by other users;-;category:security; ################################################################################# # # permfile # --------------- # permfile=file name:file permissions:owner:group:action: # Action = NOTICE or WARN # Examples: # permfile=/etc/test1.dat:600:root:wheel:NOTICE: # permfile=/etc/test1.dat:640:root:-:WARN: # ################################################################################# #permfile=/etc/inetd.conf:rw-------:root:-:WARN: #permfile=/etc/fstab:rw-r--r--:root:-:WARN: permfile=/boot/grub/grub.cfg:rw-------:root:root:WARN: permfile=/boot/grub2/grub.cfg:rw-------:root:root:WARN: permfile=/boot/grub2/user.cfg:rw-------:root:root:WARN: permfile=/etc/at.allow:rw-------:root:-:WARN: permfile=/etc/at.deny:rw-------:root:-:WARN: permfile=/etc/cron.allow:rw-------:root:-:WARN: permfile=/etc/cron.deny:rw-------:root:-:WARN: permfile=/etc/crontab:rw-------:root:-:WARN: permfile=/etc/group:rw-r--r--:root:-:WARN: permfile=/etc/group-:rw-r--r--:root:-:WARN: permfile=/etc/hosts.allow:rw-r--r--:root:root:WARN: permfile=/etc/hosts.deny:rw-r--r--:root:root:WARN: permfile=/etc/issue:rw-r--r--:root:root:WARN: permfile=/etc/issue.net:rw-r--r--:root:root:WARN: permfile=/etc/lilo.conf:rw-------:root:-:WARN: permfile=/etc/motd:rw-r--r--:root:root:WARN: permfile=/etc/passwd:rw-r--r--:root:-:WARN: permfile=/etc/passwd-:rw-r--r--:root:-:WARN: permfile=/etc/ssh/sshd_config:rw-------:root:-:WARN: permfile=/etc/hosts.equiv:rw-r--r--:root:root:WARN: permfile=/etc/shosts.equiv:rw-r--r--:root:root:WARN: permfile=/root/.rhosts:rw-------:root:root:WARN: permfile=/root/.rlogin:rw-------:root:root:WARN: permfile=/root/.shosts:rw-------:root:root:WARN: # These permissions differ by OS #permfile=/etc/gshadow:---------:root:-:WARN: #permfile=/etc/gshadow-:---------:root:-:WARN: #permfile=/etc/shadow:---------:root:-:WARN: #permfile=/etc/shadow-:---------:root:-:WARN: ################################################################################# # # permdir # --------------- # permdir=directory name:file permissions:owner:group:action when permissions are different: # ################################################################################# permdir=/root/.ssh:rwx------:root:-:WARN: permdir=/etc/cron.d:rwx------:root:root:WARN: permdir=/etc/cron.daily:rwx------:root:root:WARN: permdir=/etc/cron.hourly:rwx------:root:root:WARN: permdir=/etc/cron.weekly:rwx------:root:root:WARN: permdir=/etc/cron.monthly:rwx------:root:root:WARN: # Ignore some specific home directories # One directory per line; directories will be skipped for home directory specific # checks, like file permissions, SSH and other configuration files #ignore-home-dir=/home/user # Allow promiscuous interfaces #
Rapport après modification ![](/images/lynis02.png)]]>
Rkhunter (Rootkit Hunter)2024-11-09T00:00:00+01:002024-11-09T00:00:00+01:00https://static.rnmkcy.eu/2024/11/09/Rkhunter-Rootkit_Hunter indique à Rkhunter que tout est OK) : `rkhunter --propupd` * Effectuer une vérification : `rkhunter --checkall` * Vérification avec juste les alertes importantes : `rkhunter -c --rwo` * Tester uniquement les //malwares// : `rkhunter -c -sk --enable malware` * Accéder aux logs de RkHunter : `nano /var/log/rkhunter.log`]]>PostgreSQL2024-11-08T00:00:00+01:002024-11-08T00:00:00+01:00https://static.rnmkcy.eu/2024/11/08/PostgreSQL
### Installation Installation sur archlinux yay -S postgresql Relever version `postgres --version` *postgres (PostgreSQL) 16.3* ### Configurer le serveur PostgreSQL Pour configurer le serveur PostgreSQL sur Arch Linux, vous devez installer le paquetage Postgresql. Ensuite, vous pouvez démarrer le service en initialisant le cluster de base de données. Vous pouvez définir un mot de passe pour le super-utilisateur et créer des bases de données et des tables. Comme nous avons déjà installé PostgreSQL, nous devons maintenant le configurer. Pour cela, passez d'abord à l'utilisateur Postgres avec cette commande : sudo -iu postgres Prompt : `[postgres@pc1 ~]$` initialiser le répertoire pour les données. PostgreSQL stockera ses données dans ce répertoire. Vous pouvez utiliser l'emplacement par défaut `/var/lib/postgres/data` ou en choisir un autre. initdb --locale $LANG -E UTF8 -D '/var/lib/postgres/data/' ![](/images/postgresql01.png) Démarrer et activer PostgreSQL sudo systemctl enable postgresql --now Vérifier : `systemctl status postgresql` ![](/images/postgresql03.png) ### Accès Pour accéder psql -U postgres ### Importation base Pour importer une base SQL ``` # Créer une base psql -U postgres -c "CREATE DATABASE ttrss" # Importer psql -U postgres ttrss < nom_fichier.sql ``` ### OPTIONS Vous pouvez également activer les sommes de contrôle des données pour renforcer l'intégrité des données en ajoutant l'argument `--data-checksums` à la commande précédente. Pour savoir si les sommes de contrôle des données sont activées, exécutez la commande suivante : sudo -iu postgres psql --tuples-only -c "SHOW data_checksums" ![](/images/postgresql02.png) Pour initialiser le répertoire de données avec les sommes de contrôle activées initdb --locale $LANG -E UTF8 -D '/var/lib/postgres/data/' --data-checksums Cela créera un nouveau répertoire de données dans `/var/lib/postgres/data/` avec la locale et l'encodage spécifiés. De plus, il effectue une vérification de la somme de contrôle des données pour chaque page écrite sur le disque. Cela permet de détecter les corruptions de données causées par un matériel défectueux. Vous pouvez également modifier les méthodes d'authentification pour les connexions locales et distantes en ajoutant l'argument ci-dessous à la commande précédente : --auth-local=peer --auth-host=scram-sha-256 La méthode par défaut est la confiance, ce qui signifie que n'importe qui sur l'hôte peut se connecter en tant qu'utilisateur de la base de données. Cette méthode n'étant pas très sûre, vous pouvez en utiliser une autre.]]>
Contabo VPS debian 12 (bookworm) - Yunohost xoyaz.xyz2024-11-06T00:00:00+01:002024-11-06T00:00:00+01:00https://static.rnmkcy.eu/2024/11/06/Contabo_VPS_debian_bookworm-Yunohost mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host noprefixroute valid_lft forever preferred_lft forever 2: eth0: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:50:56:4e:73:83 brd ff:ff:ff:ff:ff:ff altname enp0s18 altname ens18 inet 37.60.230.30/20 brd 37.60.239.255 scope global eth0 valid_lft forever preferred_lft forever inet6 2a02:c206:2162:8819::1/64 scope global valid_lft forever preferred_lft forever inet6 fe80::250:56ff:fe4e:7383/64 scope link valid_lft forever preferred_lft forever ``` ### Date et heure + Synchro Activer le fuseau Europe/Paris timedatectl set-timezone Europe/Paris Horloge système synchronisée : `timedatectl` ``` Local time: Mon 2024-11-04 14:21:24 CET Universal time: Mon 2024-11-04 13:21:24 UTC RTC time: Mon 2024-11-04 13:21:24 Time zone: Europe/Paris (CET, +0100) System clock synchronized: yes NTP service: active RTC in local TZ: no ``` ### Reconfigurer locales Activer uniquement **en_GB.UTF-8**, **en_US.UTF-8** et **fr_FR.UTF-8** dpkg-reconfigure locales Default en_US.UTF-8 ``` Generating locales (this might take a while)... en_GB.UTF-8... done en_US.UTF-8... done fr_FR.UTF-8... done Generation complete. ``` ### Reverse DNS Activer le reverse DNS IPV4 et IPV6 pour le domaine xoyaz.xyz : Control panel → Reverse DNS management ![](/images/contabo-reverse-dns.png){:width="400"} Désactiver VNC: Your services → Manage → VPS Control → Manage → Disable VNC et valider par un clic sur Disable ## Yunohost xoyaz.xyz ![ ](/images/yunohost.png) **Pré-requis** Un serveur dédié ou virtuel avec Debian 12 (Bookworm) pré-installé (avec un kernel >= 6.1), avec au moins 512Mo de RAM et 16Go de capacité de stockage ### Script installation **Lancer le script d'installation** Ouvrez la ligne de commande sur votre serveur (soit directement, soit avec SSH) Vous devez être connecté en tant que root, curl installé (which curl) Lancez la commande suivante : curl https://install.yunohost.org | bash Détails de l'installation dans `/var/log/yunohost-installation_20241104_150816.log` ### Post-installation post-installation de Yunohost. yunohost tools postinstall Suivre la procédure ``` Main domain: xoyaz.xyz Admin username: yani Admin full name: yani bopro New administration password: ******************** Confirm new administration password: ******************** Warning: The YunoHost project is a team of volunteers who have made common cause to create a free operating system for servers, called YunoHost. The YunoHost software is published under the AGPLv3 license (). In connection with this software, the project administers and makes available several technical and community services for various purposes. By using these services, you agree to be bound by the following Terms of Services: . I have read and understand the Terms of Services [Y/N]: Y Info: Installing YunoHost… Success! Self-signed certificate now installed for the domain 'xoyaz.xyz' Success! Domain created Info: The email alias 'root@xoyaz.xyz' will be added to the group 'admins' Info: The email alias 'admin@xoyaz.xyz' will be added to the group 'admins' Info: The email alias 'admins@xoyaz.xyz' will be added to the group 'admins' Info: The email alias 'webmaster@xoyaz.xyz' will be added to the group 'admins' Info: The email alias 'postmaster@xoyaz.xyz' will be added to the group 'admins' Info: The email alias 'abuse@xoyaz.xyz' will be added to the group 'admins' Info: Updating aliases for group 'admins' Info: The app catalog cache is empty or obsolete. Info: Updating application catalog… Info: (Will fetch 537 logos, this may take a couple minutes) ``` ### DNS OVH xoyaz.xyz ![](/images/dns-logo.png){:width="50"} Configuration DNS domaine par défaut **xoyaz.xyz** yunohost domain dns suggest xoyaz.xyz La configuration DNS du domaine ``` Warning: No diagnosis cache yet for category 'dnsrecords' Info: This command shows you the *recommended* configuration. It does not actually set up the DNS configuration for you. It is your responsability to configure your DNS zone in your registrar according to this recommendation. ; Basic ipv4/ipv6 records @ 3600 IN A 37.60.230.30 @ 3600 IN AAAA 2a02:c206:2162:8819::1 ; Mail @ 3600 IN MX 10 xoyaz.xyz. @ 3600 IN TXT "v=spf1 a mx -all" mail._domainkey 3600 IN TXT "v=DKIM1; h=sha256; k=rsa; p=MIGfMA0GCSqGSIb....EQIDAQAB" _dmarc 3600 IN TXT "v=DMARC1; p=none" ; Extra * 3600 IN A 37.60.230.30 * 3600 IN AAAA 2a02:c206:2162:8819::1 @ 3600 IN CAA 0 issue "letsencrypt.org" ``` ![](/images/ovh-logo-a.png){:height="20"} Se connecter à l'espace client du site OVH : **Web cloud → Domaines → xoyaz.xyz → Zone DNS** Cliquer sur **"Modifier en mode textuel"**, garder les 4 premières lignes : ![](/images/dns-ovh-zone.png){:width="600"} puis effacer tout ce qu'il y a en-dessous, et le remplacer par la configuration donnée par votre serveur avec la commande `yunohost domain dns suggest xoyaz.xyz` ### Certificats SSL Let's Encrypt xoyaz.xyz ![](/images/LetsEncrypt-a.png){:height="30"} On active les certificats SSL pour le domaine xoyaz.xyz yunohost domain cert install xoyaz.xyz --no-checks Résultat ``` [...] Success! Configuration updated for 'nginx' Success! Let's Encrypt certificate now installed for the domain 'xoyize.xyz' ``` ### OpenSSH, clé et motd ![OpenSSH](/images/openssh-logo.png){:height="40"} Sur l'ordinateur de bureau Générer une paire de clé curve25519-sha256 (ECDH avec Curve25519 et SHA2) nommé **xoyaz-ed25519** pour une liaison SSH avec le serveur yunohost ssh-keygen -t ed25519 -o -a 100 -f ~/.ssh/xoyaz-ed25519 Envoyer les clés publiques sur le serveur yunohost en se se connectant avec l'utilisateur administrateur ssh-copy-id -i ~/.ssh/xoyaz-ed25519.pub yani@37.60.230.30 On se connecte avec l'utilisateur administrateur ssh yani@37.60.230.30 Sur le serveur Yunohost La liste des paramètres modifiables : `sudo yunohost settings list` Sur votre serveur, la modification du fichier de configuration SSH pour désactiver l'authentification par mot de passe est gérée par un paramètre système sudo yunohost settings set security.ssh.ssh_password_authentication -v no Modifier le port SSH *Pour empêcher les tentatives de connexion SSH par des robots qui analysent Internet à la recherche de tout serveur sur lequel SSH est activé, vous pouvez modifier le port SSH. Ceci est géré par un paramètre système, qui prend en charge la mise à jour de la configuration SSH et Fail2Ban.* sudo yunohost settings set security.ssh.ssh_port -v 55030 Accès depuis l'ordinateur de bureau avec la clé privée ```bash ssh -p 55030 -i ~/.ssh/xoyaz-ed25519 yani@37.60.230.30 # avec ip serveur ssh -p 55030 -i ~/.ssh/xoyaz-ed25519 yani@xoyaz.xyz # avec domaine serveur ``` **Motd:** `/etc/motd` ``` __ __ _ _ \ \ / /_ _ _ _ ___ | |_ ___ ___| |_ \ V /| || || ' \ / _ \| ' \ / _ \(_-<| _| |_| \_,_||_||_|\___/|_||_|\___//__/ \__| __ __ ___ _ _ __ _ ___ __ __ _ _ ___ \ \ // _ \| || |/ _` ||_ / _ \ \ /| || ||_ / /_\_\\___/ \_, |\__,_|/__|(_)/_\_\ \_, |/__| |__/ |__/ ____ ____ __ __ ___ ____ __ ____ __ |__ /|__ | / / / \ |_ )|__ / / \ |__ / / \ |_ \ / /_ / _ \| () |_ / / |_ \| () |_ |_ \| () | |___/ /_/(_)\___/ \__/(_)/___||___/ \__/(_)|___/ \__/ ``` ### Historique de la ligne de commande Ajoutez la recherche d’historique de la ligne de commande au terminal Se connecter en utilisateur debian Tapez un début de commande précédent, puis utilisez shift + up (flèche haut) pour rechercher l’historique filtré avec le début de la commande. ```bash # Global, tout utilisateur echo '"\e[1;2A": history-search-backward' | sudo tee -a /etc/inputrc echo '"\e[1;2B": history-search-forward' | sudo tee -a /etc/inputrc ``` ### Diagnostique La machine ayant été redémarré après la configuration dns , on peut lancer une vérification sudo yunohost diagnosis run Lecture après exécution sudo yunohost diagnosis show --human-readable Résultat ``` ================================= Base system (basesystem) ================================= [INFO] Server hardware architecture is kvm amd64 - Server model is QEMU Standard PC (i440FX + PIIX, 1996) [INFO] Server is running Linux kernel 6.1.0-26-amd64 [INFO] Server is running Debian 12.7 [INFO] Server is running YunoHost 12.0.6 (stable) - yunohost version: 12.0.6 (stable) - yunohost-admin version: 12.0.3.5 (stable) - yunohost-portal version: 12.0.6 (stable) - moulinette version: 12.0.3 (stable) - ssowat version: 12.0.3 (stable) ================================= Internet connectivity (ip) ================================= [SUCCESS] Domain name resolution is working! [SUCCESS] The server is connected to the Internet through IPv4! - Global IP: 37.60.230.30 - Local IP: 37.60.230.30 [SUCCESS] The server is connected to the Internet through IPv6! - Global IP: 2a02:c206:2162:8819::1 - Local IP: 2a02:c206:2162:8819::1 ================================= DNS records (dnsrecords) ================================= [SUCCESS] DNS records are correctly configured for domain xoyaz.xyz (category basic) [SUCCESS] DNS records are correctly configured for domain xoyaz.xyz (category mail) [SUCCESS] DNS records are correctly configured for domain xoyaz.xyz (category extra) [SUCCESS] Your domains are registered and not going to expire anytime soon. - xoyaz.xyz expires in 119 days. ================================= Ports exposure (ports) ================================= [SUCCESS] Port 25 is reachable from the outside. - Exposing this port is needed for email features (service postfix) [SUCCESS] Port 80 is reachable from the outside. - Exposing this port is needed for web features (service nginx) [SUCCESS] Port 443 is reachable from the outside. - Exposing this port is needed for web features (service nginx) [SUCCESS] Port 587 is reachable from the outside. - Exposing this port is needed for email features (service postfix) [SUCCESS] Port 993 is reachable from the outside. - Exposing this port is needed for email features (service dovecot) [SUCCESS] Port 55030 is reachable from the outside. - Exposing this port is needed for admin features (service ssh) ================================= Web (web) ================================= [SUCCESS] Domain xoyaz.xyz is reachable through HTTP from outside the local network. ================================= Email (mail) ================================= [SUCCESS] The SMTP mail server is able to send emails (outgoing port 25 is not blocked). [SUCCESS] The SMTP mail server is reachable from the outside and therefore is able to receive emails! [SUCCESS] Your reverse DNS is correctly configured! [SUCCESS] The IPs and domains used by this server do not appear to be blacklisted [SUCCESS] 0 pending emails in the mail queues ================================= Services status check (services) ================================= [SUCCESS] Service dnsmasq is running! [SUCCESS] Service dovecot is running! [SUCCESS] Service fail2ban is running! [SUCCESS] Service nginx is running! [SUCCESS] Service opendkim is running! [SUCCESS] Service postfix is running! [SUCCESS] Service slapd is running! [SUCCESS] Service ssh is running! [SUCCESS] Service yunohost-api is running! [SUCCESS] Service yunohost-firewall is running! [SUCCESS] Service yunohost-portal-api is running! [SUCCESS] Service yunomdns is running! ================================= System resources (systemresources) ================================= [SUCCESS] The system still has 5.2 GiB (90%) RAM available out of 5.8 GiB. [INFO] The system has no swap at all. You should consider adding at least 512 MiB of swap to avoid situations where the system runs out of memory. - Please be careful and aware that if the server is hosting swap on an SD card or SSD storage, it may drastically reduce the life expectancy of the device. [SUCCESS] Storage / (on device /dev/sda3) still has 368 GiB (99.3%) space left (out of 371 GiB)! [SUCCESS] Storage /boot (on device /dev/sda2) still has 1.7 GiB (94.5%) space left (out of 1.8 GiB)! ================================= System configurations (regenconf) ================================= [SUCCESS] All configuration files are in line with the recommended configuration! ================================= Applications (apps) ================================= [SUCCESS] All installed apps respect basic packaging practices ``` ### Ldap admin sudo *On veut autoriser l’utilisateur administrateur de Yunohost à exécuter des commandes root sans avoir à saisir le mot de passe* Ouvrir un terminal en mode administrateur Lecture du paramétrage ldap admins sudo ldapsearch -H ldap://127.0.0.1:389 -x -LLL -b "cn=admins,ou=sudo,dc=yunohost,dc=org" -s sub -x "(objectclass=*)" ``` dn: cn=admins,ou=sudo,dc=yunohost,dc=org cn: admins objectClass: sudoRole objectClass: top sudoCommand: ALL sudoUser: %admins sudoHost: ALL ``` Il faut ajouter l’option `sudoOption` avec pour valeur `!authenticate` à la branche `cn=admins` Créer un fichier `add-to-sudo-role.ldif` ``` cat > add-to-sudo-role.ldif << 'EOL' dn: cn=admins,ou=sudo,dc=yunohost,dc=org changetype: modify add: sudoOption sudoOption: !authenticate EOL ``` Exécuter la commande suivante ldapmodify -Y EXTERNAL -H ldapi:/// -f add-to-sudo-role.ldif Résultat de la commande ``` SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "cn=admins,ou=sudo,dc=yunohost,dc=org" ``` Lecture du paramétrage ldap admins sudo après modification ldapsearch -H ldap://127.0.0.1:389 -x -LLL -b "cn=admins,ou=sudo,dc=yunohost,dc=org" -s sub -x "(objectclass=*)" ``` dn: cn=admins,ou=sudo,dc=yunohost,dc=org cn: admins objectClass: sudoRole objectClass: top sudoCommand: ALL sudoUser: %admins sudoHost: ALL sudoOption: !authenticate ``` ## Domaine cinay.eu Création domaine yunohost domain add cinay.eu ``` Success! Self-signed certificate now installed for the domain 'cinay.eu' Success! Configuration updated for 'nginx' Success! Configuration updated for 'postfix' Success! Configuration updated for 'dovecot' Success! Configuration updated for 'dnsmasq' Success! Domain created ``` ### Paramètres DNS cinay.eu yunohost domain dns suggest cinay.eu La configuration DNS du domaine ``` Info: This command shows you the *recommended* configuration. It does not actually set up the DNS configuration for you. It is your responsability to configure your DNS zone in your registrar according to this recommendation. ; Basic ipv4/ipv6 records @ 3600 IN A 37.60.230.30 @ 3600 IN AAAA 2a02:c206:2162:8819::1 ; Mail @ 3600 IN MX 10 cinay.eu. @ 3600 IN TXT "v=spf1 a mx -all" ; Extra * 3600 IN A 37.60.230.30 * 3600 IN AAAA 2a02:c206:2162:8819::1 @ 3600 IN CAA 0 issue "letsencrypt.org" ``` ![](/images/ovh-logo-a.png){:height="20"} Se connecter à l'espace client du site OVH : **Web cloud → Domaines → cinay.eu → Zone DNS** Cliquer sur **"Modifier en mode textuel"**, garder les 4 premières lignes : ![](/images/dns-ovh-zone.png){:width="600"} puis effacer tout ce qu'il y a en-dessous, et le remplacer par la configuration donnée par votre serveur avec la commande `yunohost domain dns suggest cinay.eu` ### Certificats SSL Let's Encrypt cinay.eu ![](/images/LetsEncrypt-a.png){:height="30"} On active les certificats SSL pour le domaine cinay.eu yunohost domain cert install cinay.eu --no-checks Résultat ``` [...] Success! Configuration updated for 'nginx' Success! Let's Encrypt certificate now installed for the domain 'cinay.eu' ``` ### Utilisateur domaine cinay.eu Créer un utilisateur dans le domaine cinay.eu yunohost user create yack -F 'yack cinay' -p Mot_de_passe_ou_passphrase -d cinay.eu Ajout des alias ```bash yunohost user update yack --add-mailalias yann@cinay.eu yunohost user update yack --add-mailalias boproyan@cinay.eu yunohost user update yack --add-mailalias discord@cinay.eu yunohost user update yack --add-mailalias wg@cinay.eu yunohost user update yack --add-mailalias vps@cinay.eu yunohost user update yack --add-mailalias vpn@cinay.eu yunohost user update yack --add-mailalias yannick@cinay.eu yunohost user update yack --add-mailalias cnx@cinay.eu yunohost user update yack --add-mailalias yannick.meunier@cinay.eu yunohost user update yack --add-mailalias domo@cinay.eu yunohost user update yack --add-mailalias fubo@cinay.eu yunohost user update yack --add-mailalias iptv@cinay.eu yunohost user update yack --add-mailalias ign@cinay.eu yunohost user update yack --add-mailalias map@cinay.eu yunohost user update yack --add-mailalias debyan@cinay.eu yunohost user update yack --add-mailalias rnmkcy@cinay.eu yunohost user update yack --add-mailalias leno@cinay.eu yunohost user update yack --add-mailalias buyonrakuten@cinay.eu ``` ## Domaine yanfi.net Création domaine yunohost domain add yanfi.net ``` Success! Self-signed certificate now installed for the domain 'yanfi.net' Success! Configuration updated for 'nginx' Success! Configuration updated for 'postfix' Success! Configuration updated for 'dovecot' Success! Configuration updated for 'dnsmasq' Success! Domain created ``` ### Paramètres DNS yanfi.net yunohost domain dns suggest yanfi.net La configuration DNS du domaine ``` Info: This command shows you the *recommended* configuration. It does not actually set up the DNS configuration for you. It is your responsability to configure your DNS zone in your registrar according to this recommendation. ; Basic ipv4/ipv6 records @ 3600 IN A 37.60.230.30 @ 3600 IN AAAA 2a02:c206:2162:8819::1 ; Mail @ 3600 IN MX 10 yanfi.net. @ 3600 IN TXT "v=spf1 a mx -all" ; Extra * 3600 IN A 37.60.230.30 * 3600 IN AAAA 2a02:c206:2162:8819::1 @ 3600 IN CAA 0 issue "letsencrypt.org" ``` ![](/images/ovh-logo-a.png){:height="20"} Se connecter à l'espace client du site OVH : **Web cloud → Domaines → yanfi.net → Zone DNS** Cliquer sur **"Modifier en mode textuel"**, garder les 4 premières lignes : ![](/images/dns-ovh-zone.png){:width="600"} puis effacer tout ce qu'il y a en-dessous, et le remplacer par la configuration donnée par votre serveur avec la commande `yunohost domain dns suggest yanfi.net` ### Certificats SSL Let's Encrypt yanfi.net ![](/images/LetsEncrypt-a.png){:height="30"} On active les certificats SSL pour le domaine yanfi.net yunohost domain cert install yanfi.net --no-checks Résultat ``` [...] Success! Configuration updated for 'nginx' Success! Let's Encrypt certificate now installed for the domain 'yanfi.net' ``` ### Utilisateurs domaine yanfi.net Créer utilisateur 'yanfi' dans le domaine yanfi.net yunohost user create yanfi -F 'yanfi net' -p Mot_de_passe_ou_passphrase -d yanfi.net Ajout des alias ``` yunohost user update yanfi --add-mailalias foryuno@yanfi.net yunohost user update yanfi --add-mailalias yannick@yanfi.net yunohost user update yanfi --add-mailalias ffsync@yanfi.net yunohost user update yanfi --add-mailalias yannick.meunier@yanfi.net yunohost user update yanfi --add-mailalias foroli@yanfi.net yunohost user update yanfi --add-mailalias windy@yanfi.net yunohost user update yanfi --add-mailalias div@yanfi.net yunohost user update yanfi --add-mailalias api@yanfi.net yunohost user update yanfi --add-mailalias assur@yanfi.net yunohost user update yanfi --add-mailalias randos@yanfi.net ``` Créer utilisateur 'claudine' dans le domaine yanfi.net yunohost user create claudine -F 'Claudine Meunier' -p Mot_de_passe_ou_passphrase -d yanfi.net ## Migration imap [Migrer ses emails facilement avec imapsync](https://jesuisadmin.fr/migrer-emails-facilement-imapsync/) *imapsync est comme son nom l'indique un outil (développé en perl) qui permet de synchroniser des boîtes mail en utilisant le protocol imap* On se connecte sur le serveur xoyize.xyz (109.123.254.249) En mode sudo, on installe impasync ```bash sudo apt-get install libauthen-ntlm-perl libclass-load-perl libcrypt-ssleay-perl \ libdata-uniqid-perl libdigest-hmac-perl libdist-checkconflicts-perl \ libfile-copy-recursive-perl \ libio-compress-perl libio-socket-inet6-perl \ libio-socket-ssl-perl libio-tee-perl libmail-imapclient-perl \ libmodule-scandeps-perl \ libnet-ssleay-perl libpar-packer-perl libreadonly-perl libregexp-common-perl \ libsys-meminfo-perl libterm-readkey-perl libtest-fatal-perl libtest-mock-guard-perl \ libtest-pod-perl libtest-requires-perl libtest-simple-perl libunicode-string-perl \ liburi-perl libtest-nowarnings-perl \ libtest-deep-perl libtest-warn-perl \ make \ cpanminus sudo cpanm Mail::IMAPClient sudo cpanm JSON::WebToken sudo cpan Encode::IMAPUTF7 sudo cpan File::Tail ``` Transfert imap cluadine xoyize.xyz (109.123.254.249) --> imap claudine xoyaz.yz ``` imapsync --host1 109.123.254.249 --port1 993 --ssl1 --user1 claudine --password1 Mot_de_passe --host2 37.60.230.30 --port2 993 --ssl2 --user2 claudine --password2 Mot_de_passe ``` ## BorgBackup Sauvegardes borgbackup seront effectuées sur un "Storage Box" Hetzner (u326239.your-storagebox.de), dans le dépôt `ssh://u326239@u326239.your-storagebox.de:23/./backup/borg/xoyaz.xyz` ### Installation Se connecter sur la page web administration yunohost xoyaz.xyz et installer **Borg Backup** ![](/images/yuno-borg01.png) Renseigner et installer l'application ![](/images/yuno-borg02.png) Les fichiers des clés `id_borg_ed25519.pub` et `id_borg_ed25519` dans le dossier `/root/.ssh/ ### Boite de stockage Ajouter la clé Publique `ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAGSDBEyWPgDHgNuWNtaygp6jmIlpWCs6VKnC0oGLTXO root@xoyaz.xyz` au fichier authorized_keys de la boîte de stockage *Cette opération va se dérouler sur poste ayant accès à la boîte de stockage avec clés SSH* On télécharge le fichier existant `authorized_keys` de la boîte de stockage **bx11-yann** dans un fichier local nommé `storagebox_authorized_keys` ```shell echo -e "get .ssh/authorized_keys storagebox_authorized_keys" | sftp -P 23 -i ~/.ssh/bx11-yann-ed25519 u326239@u326239.your-storagebox.de ``` Ajout clé publique ```shell echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAGSDBEyWPgDHgNuWNtaygp6jmIlpWCs6VKnC0oGLTXO root@xoyaz.xyz" >> storagebox_authorized_keys ``` On renvoie le fichier modifié `storagebox_authorized_keys` dans le fichier `authorized_keys` de la boîte de stockage **bx11-yann** ```shell echo -e "put storagebox_authorized_keys .ssh/authorized_keys" | sftp -P 23 -i ~/.ssh/bx11-yann-ed25519 u326239@u326239.your-storagebox.de ``` Valider la connexion SSH avec la clé privée borg située sous /root/.ssh (en mode su) sftp -P 23 -i /root/.ssh/id_borg_ed25519 u326239@u326239.your-storagebox.de ``` The authenticity of host '[u326239.your-storagebox.de]:23 ([2a01:4f8:2b01:d53::2]:23)' can't be established. ED25519 key fingerprint is SHA256:XqONwb1S0zuj5A1CDxpOSuD2hnAArV1A3wKY7Z3sdgM. This key is not known by any other names. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '[u326239.your-storagebox.de]:23' (ED25519) to the list of known hosts. Connected to u326239.your-storagebox.de. sftp> quit ``` ### Rappel concernant la phrase de passe La phrase de passe est le seul moyen de décrypter vos sauvegardes. Vous devez veiller à la conserver en sécurité dans un endroit « extérieur » à votre serveur afin de couvrir le scénario dans lequel votre serveur serait détruit pour une raison ou une autre. {:.info} ### Tester la sauvegarde À cette étape, votre sauvegarde doit s'exécuter à l'heure prévue. Notez que la première sauvegarde peut prendre beaucoup de temps, car de nombreuses données doivent être copiées via ssh. Les sauvegardes suivantes sont incrémentales : seules les données nouvellement générées depuis la dernière sauvegarde seront copiées. {:.info} Si vous souhaitez tester la configuration correcte de Borg Apps avant l'heure prévue, vous pouvez lancer une sauvegarde manuellement à partir de la ligne de commande : sudo systemctl start borg Si tout démarre correctement, un message est envoyé: ![](/images/yuno-borg03.png){:width="300"} Une fois la sauvegarde terminée, vous pouvez vérifier qu'une sauvegarde est listée dans le **webadmin > Applications > Borg > 'Last backups list'**. ![](/images/yuno-borg04.png) ### Exécution manuelle des commandes borg Le panneau de configuration dispose d'une « Liste des dernières sauvegardes » qui permet de consulter rapidement les archives de sauvegarde récemment créées. Cependant, vous pouvez vouloir vérifier manuellement que les sauvegardes sont effectivement effectuées régulièrement et qu'elles contiennent le contenu attendu. Tout d'abord, préparez l'environnement avec les variables borg appropriées : ``` app=borg PATH="/var/www/$app/venv/bin/:$PATH" export BORG_PASSPHRASE="$(sudo yunohost app setting $app passphrase)" export BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes" repository="$(sudo yunohost app setting $app repository)" ``` Les commandes exécutables * Lister les archives: * borg list "$repository" | less * Lister les fichiers d'une archive spécifique: * borg list "$repository::ARCHIVE_NAME" | less * Voir les informations sur l'archive: * borg info "$repository::ARCHIVE_NAME" * Vérifier l'intégrité des données: * borg info "$repository::ARCHIVE_NAME" --verify-data ### Restauration d'archives à partir de Borg Une « archive » borg peut être exportée vers un fichier `.tar` qui peut ensuite être restauré en utilisant la procédure classique de sauvegarde et de restauration de Yunohost : **NB : cette commande suppose que vous avez préparé l'environnement comme dans la section précédente** borg export-tar « $repository::ARCHIVE_NAME » /home/yunohost/archives/ARCHIVE_NAME.tar #### Restaurez ensuite en utilisant le flux de travail classique : * à partir de la ligne de commande : * yunohost backup restore ARCHIVE_NAME * ou dans le webadmin > Sauvegardes #### Restaurer la « source+config » de l'application, et ses données séparément Pour les applications contenant une grande quantité de données, il n'est pas pratique de tout restaurer en une seule fois en raison de l'espace et du temps que cela prendrait. Au lieu de cela, vous voudrez peut-être restaurer d'abord le « noyau » (la source, la configuration, etc.) de l'application, - et ensuite les données. Tout d'abord, borg peut exporter une archive `.tar` mais ignorer le chemin correspondant aux données de l'application. Par exemple, pour exporter une archive tar pour Nextcloud, mais sans ses données : ```shell borg export-tar --exclude apps/nextcloud/backup/home/yunohost.app "$repository::ARCHIVE_NAME" /home/yunohost.backup/archives/ARCHIVE_NAME.tar yunohost backup restore ARCHIVE_NAME ``` Ensuite, extrayez les données de Nextcloud directement au bon endroit, **sans passer** par le processus classique de restauration de sauvegarde de YunoHost : ```shell cd /home/yunohost.app/ borg extract "$repository::ARCHIVE_NAME" apps/nextcloud/backup/home/yunohost.app/ mv apps/nextcloud/backup/home/yunohost.app/nextcloud ./ rm -r apps ``` ## Outils ### Cockpit Installer cockpit en tant que "client" sudo apt install cockpit]]>Réseau NetworkManager - nmcli2024-10-31T00:00:00+01:002024-10-31T00:00:00+01:00https://static.rnmkcy.eu/2024/10/31/NetworkManager-nmcli ifname ` **Modifier une connexion réseau existante** Avec nmcli, on peut apporter des ajustements et des configurations à une connexion réseau existante, comme basculer entre les configurations statiques et DHCP `sudo nmcli connection modify ` les configurations que nous pouvons ajouter et modifier une connexion à l’aide de nmcli. Tout d’abord, nous allons créer un nouveau profil de connexion, par exemple sous le nom “gl-inet” nmcli connection add con-name gl-inet ifname enp3s0f1 type ethernet On obtient la sortie suivante Connexion « gl-inet » (afec2e60-eb76-476c-8046-5ace62449019) ajoutée avec succès. Le problème est que l'on se connecte immédiatement à cette interface qui n'est pas encore configurée {:.warning} Pour définir le démarrage automatique (ou pas) de la connexion réseau nmcli connection modify gl-inet connection.autoconnect yes nmcli connection modify gl-inet connection.autoconnect no **Définir une adresse IPv4 statique avec un masque de sous-réseau /24** sudo nmcli connection modify gl-inet ipv4.address 192.168.8.2/24 **Définir une adresse IPv6 statique avec un masque de sous-réseau /64** (facultatif) sudo nmcli connection modify gl-inet ipv6.addresses 2001:db8:1::1/64 **Configurer une passerelle par défaut en IPv4 ou IPv6** ```bash #IPv4 sudo nmcli connection modify gl-inet ipv4.gateway 192.168.8.1 #IPv6 sudo nmcli connection modify gl-inet ipv6.gateway 2001:db8:1::fffe ``` **Configurer un serveur DNS en IPv4 ou IPv6** Pour spécifier les serveurs DNS sur votre connexion internet, utilisez ces commandes : ```bash #IPv4 sudo nmcli connection modify gl-inet ipv4.dns "192.168.0.254" #IPv6 nmcli connection modify gl-inet ipv6.dns "2001:db8:1::ffbb" ``` **Définir la méthode de connexion IPv4 et IPv6 en DHCP (IP automatique)** Pour configurer votre connexion en DHCP : ```bash #For IPv4 sudo nmcli connection modify gl-inet ipv4.method auto #For IPv6 sudo sudo nmcli connection modify gl-inet ipv6.method auto ``` Pour que les modifications apportées prennent effet, vous devez activer le profil. ```bash sudo nmcli connection up gl-inet ```]]>Lenovo Serveur MySpeed2024-10-29T00:00:00+01:002024-10-29T00:00:00+01:00https://static.rnmkcy.eu/2024/10/29/Lenovo_Serveur_MySpeed ### Analyse vitesse internet MySpeed est un logiciel d'analyse de test de vitesse qui enregistre votre vitesse internet pendant 30 jours. Caractéristiques * 📊 MySpeed génère des statistiques claires sur la vitesse, le ping, et plus encore. * ⏰ MySpeed automatise les tests de vitesse et vous permet de définir le temps entre les tests à l'aide d'expressions Cron. * 🗄️ Ajouter plusieurs serveurs directement à une instance MySpeed * 🩺 Configurez des contrôles de santé pour vous notifier par email, Signal, WhatsApp ou Telegram en cas d'erreurs ou de temps d'arrêt * 📆 Les résultats des tests peuvent être stockés jusqu'à 30 jours * 🔥 Prise en charge de Prometheus et Grafana * 🗳️ Choisissez entre les serveurs de test de vitesse Ookla, LibreSpeed et Cloudflare * 💁 En savoir plus sur MySpeed sur [notre site web](https://myspeed.dev/) ### Installer MySpeed Prérequis ```bash # debian sudo apt install wget curl unzip # alpine linux sudo apk add wget curl unzip ``` Vous n'avez besoin de faire cela que si vous n'avez pas encore installé NodeJS ```bash curl -sSL https://deb.nodesource.com/setup_18.x | bash sudo apt-get install nodejs -y ``` Versions installées: `node -v && npm -v` node v20.10.0 npm 10.8.3 Créer un dossier mkdir ~/sharenfs/rnmkcy/myspeed && cd ~/sharenfs/rnmkcy/myspeed Télécharger la dernière version ``` wget $(curl -s https://api.github.com/repos/gnmyt/myspeed/releases/latest | grep browser_download_url | cut -d '"' -f 4) unzip MySpeed-*.zip && rm MySpeed-*.zip npm install npm audit fix ``` ### Proxy nginx Créer le proxy sur le domaine `speed.rnmkcy.eu` qui écoute sur le port 5216 ``` server { listen 80; listen [::]:80; server_name speed.rnmkcy.eu; # redirect all plain HTTP requests to HTTPS return 301 https://speed.rnmkcy.eu$request_uri; } server { # ipv4 listening port/protocol listen 443 ssl http2; # ipv6 listening port/protocol listen [::]:443 ssl http2; server_name speed.rnmkcy.eu; include /etc/nginx/conf.d/security.conf.inc; location / { proxy_pass http://127.0.0.1:5216; } } ``` ### Lancement MySpeed Lancer le serveur manuellement NODE_ENV=production node server ![](/images/alpine-MySpeed01.png) Depuis un navigateur, ouvrir le lien https://speed.rnmkcy.eu ![](/images/alpine-MySpeed02.png) ![](/images/alpine-MySpeed03.png) ![](/images/alpine-MySpeed04.png) ![](/images/alpine-MySpeed05.png) ![](/images/alpine-MySpeed06.png) Après lancement du test ![](/images/alpine-MySpeed07.png) Sur le terminal ![](/images/alpine-MySpeed08.png) ### MySpeed 24/7 Créez un fichier nommé `myspeed.service` sous `/etc/systemd/system` sudo nano /etc/systemd/system/myspeed.service ``` [Unit] Description=MySpeed After=network.target [Service] Type=simple ExecStart=/home/leno/.nvm/versions/node/v20.10.0/bin/node server Restart=always User=leno Environment=NODE_ENV=production WorkingDirectory=/sharenfs/rnmkcy/myspeed [Install] WantedBy=multi-user.target ``` Enregistrer le fichier, CTRL + X, puis Y et enfin Entrée Rechargez systemd sudo systemctl daemon-reload Si vous voulez que MySpeed démarre au démarrage de systemd sudo systemctl enable myspeed --now Vérifiez maintenant le statut de MySpeed systemctl status myspeed ![](/images/MySpeed-service.png) Ouvrir le lien ![](/images/MySpeed-web01.png) ![](/images/MySpeed-web02.png) ![](/images/MySpeed-web03.png) ![](/images/MySpeed-web04.png)]]>Lenovo KVM - SearXNG Alpine Linux (alpine-searx)2024-10-22T00:00:00+02:002024-10-22T00:00:00+02:00https://static.rnmkcy.eu/2024/10/22/KVM-Alpine-Linux-Docker-SearXNG 192.168.0.31 Puis redémarrer : `reboot` La fenêtre vnc se ferme ### Explications sur la procédure *Normalement, vous n'avez rien à faire, les paramètres par défaut doivent convenir. Mais si vous le désirez, vous pouvez les modifier pour utiliser une interface particulière, une IP fixe, un serveur proxy, etc. Une soixantaine de serveurs mirroir vous seront proposés pour télécharger les paquets. Choisissez un numéro dans la liste ou demandez au système de les tester et de sélectionner le plus rapide. Vous pouvez aussi modifier le fichier des sources. Il vous faudra ensuite choisir votre serveur SSH : OpenSSH, Dropbear ou aucun.* On termine par la méthode d'installation. Il en existe quatre : * none : le système et ses données sont placés en RAM et seront perdus après le redémarrage * sys : le système et ses données sont placés sur un HDD/SSD * data : le système est placé en RAM, les données sur un HDD/SSD * lvm : utilisation de Logical Volume Manager, les deux choix précédents seront proposés (lvmsys, lvmdata) Si vous stockez le système en mémoire, il faudra trouver un moyen de sauvegarder la configuration. Vous pourrez le faire uniquement depuis un lecteur de disquettes (!) ou une clé USB. Une fois le système installé, vous pourrez l'utiliser directement s'il est placé en mémoire ou redémarrer si vous avez opté pour un stockage classique. Il n'est pas conseillé d'utiliser directement le compte root pour les actions du quotidien. Si utilisateur non créé dans la procédure d'installation, le créer avec son propre espace dans /home/ adduser alsearx Vous pouvez utiliser l'utilisateur pour vous connecter via SSH (impossible avec le compte root) ### Connexion alpine-searx via SSH Sur un poste linux du réseau ssh alsearx@192.168.0.31 Une fois connecté ,vous pouvez accéder au "root" de manière classique avec la commande : su - Mise à jour ```shell apk update apk upgrade # Vous pouvez fusionner les deux lignes avec apk -U upgrade ``` Editeur nano (Vous pouvez aussi opter pour vi qui est nativement présent sur le système) apk add nano ### Réseau - IP statique [How to configure static IP address on Alpine Linux](https://www.cyberciti.biz/faq/how-to-configure-static-ip-address-on-alpine-linux/) Le fichier de configuration `/etc/network/interfaces` /etc/network/interfaces ```shell auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.100.15/24 gateway 192.168.100.1 ``` Fichier de résolution dns /etc/resolv.conf ``` nameserver 1.1.1.1 nameserver 9.9.9.9 ``` Les modifications apportées à /etc/network/interfaces peuvent être activées en exécutant ```shell service networking restart ``` ### OpenSSH avec clés *Connexion ssh sur un autre port avec un jeu de clés* Générer une paire de clé sur l'ordinateur de bureau PC1 Générer une paire de clé curve25519-sha256 (ECDH avec Curve25519 et SHA2) pour une liaison SSH avec le serveur. ssh-keygen -t ed25519 -o -a 100 -f ~/.ssh/vm-alpine-searx Copier la clé publique `cat ~/.ssh/vm-alpine-searx.pub` dans le presse-papier ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBQu0LRiDjPM7BJAfjECl22fnEchVuxnw38RV2IJs0+l yann@yann-pc1 On se connecte sur la machine virtuelle alpine linux "ttrss alpine-searx" ssh alsearx@192.168.100.15 Créer le répertoire et ouvrir nouveau fichier mkdir -p $HOME/.ssh/ nano $HOME/.ssh/authorized_keys Coller le contenu du presse-papier , sauver le fichier et sortir Modifier les droits chmod 600 $HOME/.ssh/authorized_keys Passer en mode su su - Modifier la configuration serveur SSH nano /etc/ssh/sshd_config Modifier ``` Port = 55216 PasswordAuthentication no ``` Relancer le serveur service sshd restart Test connexion ssh -p 55216 -i ~/.ssh/vm-alpine-searx alsearx@192.168.100.15 ### sudo Passer en root su - Editer la configuration des dépôts nano /etc/apk/repositories Trouvez maintenant la ligne qui se termine dans /community Ensuite, retirez le # au début de la ligne. Le fichier résultant devrait ressembler à ceci ``` #/media/cdrom/apks http://alpinelinux.mirrors.ovh.net/v3.20/main http://alpinelinux.mirrors.ovh.net/v3.20/community ``` Mise à jour des dépôts apk update Installer sudo apk add sudo Pas de mot de passe sudo pour l'utilisateur alouest echo "alsearx ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers ## Docker ![](/images/docker-logo-a.png) ### Installer docker sur Alpine Linux [Install docker & docker-compose on Alpine Linux](https://geekscircuit.com/install-docker-docker-compose-on-alpine-linux/) Passer en root su - Editer la configuration des dépôts nano /etc/apk/repositories Trouvez maintenant la ligne qui se termine dans /community Ensuite, retirez le # au début de la ligne. Le fichier résultant devrait ressembler à ceci ``` #/media/cdrom/apks http://alpinelinux.mirrors.ovh.net/v3.20/main http://alpinelinux.mirrors.ovh.net/v3.20/community ``` Installer docker et docker-compose ```bash apk update apk add docker docker-compose ``` Activer autostart sur boot en utilisant ```bash rc-update add docker default ``` puis vous pouvez lancer le service docker en utilisant la commande ```bash /etc/init.d/docker start # ou service docker start ``` ## SearxNG *[SearXNG](https://docs.searxng.org/) est un métamoteur qui recherche ses informations à travers plusieurs moteurs de recherche généralistes* ### Image docker Si vous prévoyez de construire et de maintenir une image Docker par vous-même, assurez-vous que Docker est installé. Sous Linux, n'oubliez pas d'ajouter votre utilisateur au groupe Docker (déconnectez-vous et reconnectez-vous pour que votre appartenance au groupe soit réévaluée) : sudo adduser $USER docker L'image docker est basée sur git://Dockerfile et disponible sur searxng/searxng @dockerhub. L'utilisation de l'image docker est assez simple, par exemple vous pouvez extraire l'image searxng/searxng @dockerhub et déployer une instance locale en utilisant docker run: ```bash mkdir YannSearXNG cd YannSearXNG export PORT=8080 docker pull searxng/searxng ``` Pour avoir un démarrage automatique au boot : `--restart=always --name restart_always` ``` cd ~/YannSearXNG export PORT=8080 docker run -d -p ${PORT}:8080 \ --restart=always \ --name searxng \ -v "${PWD}/searxng:/etc/searxng" \ -e "BASE_URL=http://localhost:$PORT/" \ -e "INSTANCE_NAME=YannSearXNG" \ searxng/searxng ``` Sans démarrage auto... ```bash cd ~/YannSearXNG export PORT=8080 docker run --rm \ -d -p ${PORT}:8080 \ -v "${PWD}/searxng:/etc/searxng" \ -e "BASE_URL=http://localhost:$PORT/" \ -e "INSTANCE_NAME=YannSearXNG" \ searxng/searxng ``` Les variables d'environnement `UWSGI_WORKERS` et `UWSGI_THREADS` remplacent le nombre par défaut de processus UWSGI et de threads UWSGI spécifiés dans le fichier `/etc/searxng/uwsgi.ini`. Ouvrez votre navigateur WEB et visitez l'URL : xdg-open http://192.168.100.15:8080 ### Paramétrage searxng Dans ${PWD}/searxng, vous trouverez `settings.yml` et `uwsgi.ini`. Vous pouvez modifier ces fichiers selon vos besoins ``` # résultat sur un nouvel onglet sudo sed -i -e "s/\# results_on_new_tab: false/results_on_new_tab\: true/g" $HOME/YannSearXNG/searxng/settings.yml ``` Identifier le container : `docker ps` ``` CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 97cf004cd5d0 searxng/searxng "/sbin/tini -- /usr/…" About a minute ago Up About a minute 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp searxng ``` et redémarrer l'image Docker. docker container restart 97cf004cd5d0 ### Mise à jour automatique *Les stratégies pour automatiser le processus de mise à jour des conteneurs Docker lorsque leurs images de base sont mises à jour. Nous examinerons des scripts Bash personnalisés et des outils tiers tels que Watchtower, qui offrent un éventail de solutions([Auto-Update Docker Containers for Latest Base Images](https://www.baeldung.com/ops/docker-container-auto-update-newest-base-images))* Watchtower est un outil open-source qui automatise le processus de mise à jour des conteneurs Docker. Il interroge le registre Docker pour vérifier les mises à jour des images à partir desquelles les conteneurs ont été initialement instanciés. Supposons que Watchtower détecte qu'une image a été mise à jour. Dans ce cas, elle arrête le conteneur exécutant l'image périmée, extrait la nouvelle image du registre Docker et démarre un nouveau conteneur avec les mêmes configurations que le précédent. Cela garantit que nos conteneurs exécutent toujours la dernière version de l'image de base sans intervention manuelle. **Exécution du conteneur Watchtower** Paramètres * fixer l'intervalle à 86400 secondes, ce qui demande à Watchtower de vérifier les mises à jour une fois par jour Le paramètre `--schedule` prend comme valeur une expression crontab. Sinon, le paramètre `--interval` peut-être utilisé pour définir le nombre de secondes entre chaque vérification. `--schedule "0 0 4 * * *"` `--interval 86400` Cela permet de trouver un équilibre entre l'immédiateté et la consommation des ressources du système. * Pour configurer les notifications par courriel, nous pouvons configurer les variables d'environnement et exécuter Watchtower: ``` -e WATCHTOWER_NOTIFICATIONS=email \ -e WATCHTOWER_NOTIFICATION_EMAIL_FROM=your-email@example.com \ -e WATCHTOWER_NOTIFICATION_EMAIL_TO=target-email@example.com \ -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.example.com \ -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587 \ -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=your-email@example.com \ -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=your-email-password \ ``` nous devons d'abord lancer le conteneur Watchtower lui-même en exécutant une commande Docker : ```bash docker run -d \ --name watchtower \ -v /var/run/docker.sock:/var/run/docker.sock \ -e WATCHTOWER_NOTIFICATIONS=email \ -e WATCHTOWER_NOTIFICATION_EMAIL_FROM=your-email@example.com \ -e WATCHTOWER_NOTIFICATION_EMAIL_TO=target-email@example.com \ -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.example.com \ -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587 \ -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=your-email@example.com \ -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=your-email-password \ containrrr/watchtower \ --schedule "0 0 4 * * *" ``` Ainsi, nous exécutons Watchtower en mode détaché, ce qui lui donne accès au **socket Docker**, qui est nécessaire à Watchtower pour surveiller et mettre à jour les conteneurs. Notre sortie montre l'identifiant unique du conteneur Watchtower qui s'exécute maintenant en arrière-plan. `694862e2a2a6fbf61da8e7336fca4b4bac5f45c459024d5338224007c8838c5c` Voir journal : `docker logs watchtower` ``` time="2024-10-22T13:19:49Z" level=info msg="Watchtower 1.7.1" time="2024-10-22T13:19:49Z" level=info msg="Using notifications: smtp" time="2024-10-22T13:19:49Z" level=info msg="Checking all containers (except explicitly disabled with label)" time="2024-10-22T13:19:49Z" level=info msg="Scheduling first run: 2024-10-23 04:00:00 +0000 UTC" time="2024-10-22T13:19:49Z" level=info msg="Note that the first check will be performed in 14 hours, 40 minutes, 10 seconds" ``` ### Commandes docker Utilisez la commande `container ls` pour lister les conteneurs en cours d'exécution, ajoutez le drapeau `-a` pour lister les conteneurs éteints également. La commande `container stop` permet d'arrêter un conteneur en cours d'exécution. Pour se débarrasser d'un conteneur, utilisez la commande `container rm`: ``` localhost:~/YannSearXNG$ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e8557899b8e9 searxng/searxng "/sbin/tini -- /usr/…" About a minute ago Up About a minute 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp nice_chaplygin ``` Si vous n'utilisez plus Docker et que vous souhaitez vous débarrasser de tous les conteneurs et images, utilisez la commande prune suivante : ``` docker stop $(docker ps -aq) # stop all containers docker system prune # make some housekeeping docker rmi -f $(docker images -q) # drop all images ``` **Mise à jour automatique du container** Watchtower est un outil open-source permettant d'automatiser ces mises à jour. Il se présente sous la forme d'une image Docker à lancer très simplement ``` docker run \ --name watchtower \ --volume /var/run/docker.sock:/var/run/docker.sock \ --detach \ v2tec/watchtower \ --interval "30" ``` Le paramètre `--volume` est obligatoire pour que Watchtower puisse communiquer avec le démon Docker sur le système hôte. ### Proxy nginx searx.rnmkcy.eu Sur le serveur Lenovo rnmkcy.eu, créer un proxy pour SearXNG `/etc/nginx/conf.d/searx.rnmkcy.eu.conf` ```nginx server { listen 80; listen [::]:80; server_name searx.rnmkcy.eu; # redirect all plain HTTP requests to HTTPS return 301 https://searx.rnmkcy.eu$request_uri; } server { # ipv4 listening port/protocol listen 443 ssl http2; # ipv6 listening port/protocol listen [::]:443 ssl http2; server_name searx.rnmkcy.eu; include /etc/nginx/conf.d/security.conf.inc; location / { proxy_pass http://192.168.100.15:8080; } } ``` Recharger nginx sudo systemctl reload nginx Ouvrir le lien ![](/images/searx.rnmkcy.eu.png){:width="500"}]]>Cartographie2024-10-14T00:00:00+02:002024-10-14T00:00:00+02:00https://static.rnmkcy.eu/2024/10/14/OSM_Python` Créer un environnement pour l'application python3 -m venv OsmScripts activer l'environnement virtuel source OsmScripts/bin/activate On arrive sur un prompt : `(OsmScripts) [yann@pc1 osm_python]$` Mettre à jour pip dans l'environnement python -m pip install --upgrade pip ![](/images/OsmScripts03.png) **Installer des paquets à l'aide de pip** [Install packages in a virtual environment using pip and venv](https://packaging.python.org/en/latest/guides/installing-using-pip-and-virtual-environments/) Lorsque votre environnement virtuel est activé, vous pouvez installer des paquets. Utilisez la commande pip install pour installer des paquets.Par exemple, installons la bibliothèque Requests à partir de l'index des paquets Python (PyPI) : `python3 -m pip install requests` Rechercher et installer les paquets `gpxpy` et `geopy` sur qui sont utilisés dans le projet ```bash pip install gpxpy pip install geopy ``` **Wing Personal projet OsmScripts** Dans le dossier `$HOME/media/osm-new` Projet --> Nouveau projet ![](/images/wp001.png){width="400"} ![](/images/wp002.png){width="400"} ![](/images/wp003.png){width="500"} ![](/images/wp004.png){width="400"} Projet : `$HOME/media/osm-new/osm_python/OsmScripts.wpr` Structure ``` [yann@pc1 ~]$ tree -L 2 -d /srv/media/osm-new/ /srv/media/osm-new/ ├── archives ├── css │ └── images ├── file │ ├── photos │ └── tmp ├── fonts ├── images ├── js └── osm_python └── OsmScripts ``` **Le script python** Le script python `$HOME/media/osm-new/osm_python/OsmScripts/tracesgpxnew.py`
Etendre Réduire {% highlight python %} #!/usr/bin/python # -*- coding: utf-8 -*- """ tracesgpxnew.py Créé le 10 juin 2021 Modifié le 14 octobre 2024 """ import pdb import sys as mod_sys import logging as mod_logging import math as mod_math import gpxpy as mod_gpxpy import os, fnmatch import sys import shutil import json from xml.dom import minidom import datetime import calendar import geopy.geocoders from geopy.geocoders import Nominatim def format_time(time_s): if not time_s: return 'n/a' else: minutes = mod_math.floor(time_s / 60.) hours = mod_math.floor(minutes / 60.) return '%s:%s:%s' % (str(int(hours)).zfill(2), str(int(minutes % 60)).zfill(2), str(int(time_s % 60)).zfill(2)) def format_date(date_s): if not date_s: return 'n/a' else: #start_time.strftime("%d %b %Y") return '%s' % (date_s.strftime("%d %b %Y")) def format_heure(heure_s): if not heure_s: return 'n/a' else: #start_time.strftime("%H:%M:%S") return '%s' % (heure_s.strftime("%H:%M:%S")) def format_long_length(length): return '{:.3f}km'.format(length / 1000.) def format_long_length_num(length): return '{:.3f}'.format(length / 1000.) def format_short_length(length): return '{:.2f}m'.format(length) def format_short_length_num(length): return '{:.2f}'.format(length) def format_speed(speed): if not speed: speed = 0 else: #return '{:.2f}m/s = {:.2f}km/h'.format(speed, speed * 3600. / 1000.) return '{:.2f}km/h'.format(speed * 3600. / 1000.) def format_speed_num(speed): if not speed: speed = 0 else: #return '{:.2f}m/s = {:.2f}km/h'.format(speed, speed * 3600. / 1000.) return '{:.2f}'.format(speed * 3600. / 1000.) def quelJour(date): jour = datetime.datetime.strptime(date, '%d %m %Y').weekday() return (calendar.day_name[jour]) def nblignes(nf): # return len(open(nf).readlines( )) def print_gpx_part_info(gpx_part,jsTraces,dataTraces,fichier,dataIndex): data = gpx_part.tracks[0].segments[0].points data = gpx_part.tracks[0].segments[0].points lati=data[0].latitude longi=data[0].longitude # Nominatim geopy.geocoders.options.default_user_agent = 'gxinforep' geopy.geocoders.options.default_timeout = None geolocator = Nominatim() location = geolocator.reverse(str(lati) + "," + str(longi)) y=location.address.split(",") z=0 for x in y: z=z+1 nom=y[z-8] + ' ' + y[z-7] + ' ' + y[z-2] lieu=y[z-8].strip() commune=y[z-7].strip() cposte=y[z-2].strip() length_2d = gpx_part.length_2d() moving_time, stopped_time, moving_distance, stopped_distance, max_speed = gpx_part.get_moving_data() uphill, downhill = gpx_part.get_uphill_downhill() start_time, end_time = gpx_part.get_time_bounds() vmoy=(format_speed(moving_distance / moving_time) if moving_time > 0 else "?") vmoy_num=(format_speed_num(moving_distance / moving_time) if moving_time > 0 else "?") # les randonnées du dimanche sont par défaut privées # si dimanche (Sunday) --> private sinon public privpub = "public" if quelJour(start_time.strftime("%d %m %Y")) == "Sunday": privpub = "private" # latitude longitude lieu commune cp distance vitesse niveau jour gpx indexation # { genre: 'Rap', band: 'Migos', albums: 2}, jsTraces.write('{\n "id": ' + str(dataIndex) + ',"latitude": ' + str(lati) + ', "longitude": ' + str(longi) + ', "lieu": "' + lieu \ + '", "commune": "' + commune + '", "cp": "' + cposte + '", "distance": "' + format_long_length_num(length_2d) \ + '", "vitesse": "' + vmoy_num + '", "niveau": "' + format_short_length_num(uphill) \ + '", "jour": "' + start_time.strftime("%Y-%m-%d") + '", "gpx": "' + fichier + '"\n}') # if dataIndex == initial_count - 1: jsTraces.write('\n') else: jsTraces.write(',\n') dataChaine='[' + str(lati) + ',' + str(longi) + ',"' + lieu + '","' + commune + '","' + cposte + '","' + format_long_length_num(length_2d) + '","' + vmoy_num \ + '","' + format_short_length_num(uphill) + '","' + start_time.strftime("%Y-%m-%d") + '","' + fichier + '",' + str(dataIndex) + '],\n' dataTraces.write(dataChaine) if __name__ == '__main__': # Le dossier qui contient les traces gpx dossier=os.getcwd()+'/' # on teste si arguments if len( sys.argv ) > 1: for strParam in sys.argv[1:]: dossier=strParam+'/' # parsing folder print("Dossier gpx: " + dossier) # --------------- # le nom du fichier sans extension : ztest ou traces NomSansExt = "tracestableau" jsonFile= dossier + NomSansExt + ".json" jsonFileExist = False # Fichier utilisé dans osm-new dataFile= dossier + "tracesdataset.js" dataFileExist = False if os.path.exists(jsonFile): #os.remove(jsonFile) jsonFileExist = True if os.path.exists(dataFile): #os.remove(dataFile) dataFileExist = True # Les fichiers gpx à traiter sont dans /tmp listOfFiles = sorted(os.listdir(dossier + 'tmp/')) pattern = "*.gpx" if len(listOfFiles) == 0: print("pas de fichier à traiter") quit() # Nb fichiers initial_count = 0 dir = dossier + 'tmp/' for path in os.listdir(dir): if os.path.isfile(os.path.join(dir, path)): initial_count += 1 print("Nombre de fichiers: " + str(initial_count)) # Traitement du fichier jsonFile suivant existance ou pas if not jsonFileExist: jsTraces = open(jsonFile, "a+") jsTraces.write("[\n") else: #supprimer la dernière ligne du fichier jsonFile os.system('sed -i "$ d" {0}'.format(jsonFile)) jsTraces = open(jsonFile, "a+") # Traitement du fichier dataFile suivant existance ou pas if not dataFileExist: dataIndex = 0 dataTraces = open(dataFile, "a+") dataTraces.write("var addressPoints = [\n") else: # fichier existe , nombre de lignes dataIndex = nblignes(dataFile) - 2 #supprimer la dernière ligne du fichier dataFile os.system('sed -i "$ d" {0}'.format(dataFile)) dataTraces = open(dataFile, "a+") for fichier in listOfFiles: if fnmatch.fnmatch(fichier, pattern): try: print('gpx : %s' % fichier) gpx = mod_gpxpy.parse(open(dossier +'tmp/' + fichier)) print_gpx_part_info(gpx,jsTraces,dataTraces,fichier,dataIndex) # Déplacer le fichier gpx après traitement: shutil.move(dossier +'tmp/' + fichier, dossier + fichier) # Incrémenter l'index: dataIndex = dataIndex + 1 except Exception as e: mod_logging.exception(e) print('Error processing %s' % dossier +'/' + fichier) mod_sys.exit(1) print('Ecriture fichier ' + jsonFile) jsTraces.write(']') jsTraces.close() print('Ecriture fichier ' + dataFile) dataTraces.write('];') dataTraces.close() {% endhighlight %}
### Utilisation 'tracesgpxnew.py' Le lancement du script tient compte de l'environnement python, du chemin complet du script et du paramètre dossier qui contiendra le(s) fichiers gpx ```bash /srv/media/osm-new/osm_python/OsmScripts/bin/python /srv/media/osm-new/osm_python/OsmScripts/tracesgpxnew.py /srv/media/osm-new/file ``` ### Synchronisation distante Après intégration des nouveaux fichiers gpx par le script python, faire une mise à jour des dossiers distants par rsync ```bash #!/bin/bash echo "----------------------------------------------- Synchro osm-new avec xoyize.xyz" rsync -avz --delete --exclude 'archives' --exclude 'osm_python' --rsync-path="sudo rsync" -e "ssh -p 55249 -i /home/yann/.ssh/xoyize-ed25519 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" /srv/media/osm-new yako@xoyize.xyz:/home/yunohost.multimedia/share/Divers/ echo "----------------------------------------------- Synchro osm-new avec nfs sharenfs/multimedia/Divers/osm-new" rsync -avz --delete --exclude 'archives' --exclude 'osm_python' /srv/media/osm-new /home/yann/sharenfs/multimedia/Divers/ exit ``` Exécuter `sh /srv/media/osm-new/osm-new-synchro.sh` ### Alias local 'tracesgpx' Alias 'tracesgpx' dans `.bashrc` ```bash alias tracesgpx="/srv/media/osm-new/osm_python/OsmScripts/bin/python /srv/media/osm-new/osm_python/OsmScripts/tracesgpxnew.py /srv/media/osm-new/file" ``` Ajout synchronisation à l'alias 'tracesgpx' dans `.bashrc` ```bash alias tracesgpx="/srv/media/osm-new/osm_python/OsmScripts/bin/python /srv/media/osm-new/osm_python/OsmScripts/tracesgpxnew.py /srv/media/osm-new/file; sh /srv/media/osm-new/osm-new-synchro.sh" ```]]>
PC1 - Endeavour Neo XFCE sur partition LVM chiffrée2024-10-07T00:00:00+02:002024-10-07T00:00:00+02:00https://static.rnmkcy.eu/2024/10/07/PC1-EndeavourOS-XFCE-nvme_2To-LVM-ChiffreAvantages: * partitionnement simple avec connaissance de LVM * Une seule clé nécessaire pour déverrouiller tous les volumes (p. ex. installation facile de récupération de disque) * Mise en page du volume non visible lorsque verrouillé * Méthode la plus facile pour permettre la [suspension du disque](https://wiki.archlinux.org/title/Dm-crypt/Swap_encryption#With_suspend-to-disk_support) * Inconvénients: * LVM ajoute une couche de mappage supplémentaire et un "hook" * Moins utile, si un volume doit recevoir une clé séparée `Installer une distribution EndeavourOS chiffrée sur une partition LVM est impossible avec l'outil "Calamarès"`{:.warning} ## EndeavourOS temporaire *Pour une installation EndavourOS LVM/LUKS, il faut passer par une installation temporaire* ### Création Eos USB Live *Création d'une clé USB EndeavourOS bootable* Dans un terminal linux Télécharger le dernier fichier iSO : **EndeavourOS_Endeavour_neo-2024.09.22.iso** Vérifier checksum ```bash sha512sum -c EndeavourOS_Endeavour_neo-2024.09.22.iso.sha512sum ``` Résultat de la commande ci dessus après quelques minutes *EndeavourOS_Endeavour_neo-2024.09.22.iso: Réussi* Créer la clé bootable Pour savoir sur quel périphérique, connecter la clé sur un port USB d'un ordinateur et lancer la commande `sudo dmesg` ou `lsblk` Dans le cas présent , le périphérique USB est **/dev/sdc** ```bash sudo dd if=EndeavourOS_Endeavour_neo-2024.09.22.iso of=/dev/sdc bs=4M --progress ``` ### Démarrer sur Eos USB Live Insérer la clé USB EndeavourOS, redémarrer la machine, sur Eos live Démarrage avec la clé USB insérée dans le Mini tour PC1 et appui sur F8 pour un accès au menu Choisir `UEFI: KingstonDataTraveler 2.0PMAP (3820MB)` Vous arrivez sur la page de sélection ![](/images/endos0001.png){:width="400"} Valider le choix par défaut 1. basculer en FR 2. ouvrir un terminal ![](/images/eos-lvm-luks01.png){:width="600"} `Clavier QWERTY!!!`{:.warning} ![](/images/eos-lvm-luks01a.png){:width="600"} 1 --> System Settings --> Keyboard Remove Us... Apply On va se connecter en SSH ``` ip a # relever adresse IP sudo systemctl start sshd passwd liveuser # changer le mot de passe liveuser --> rtyuiop sudo firewall-cmd --zone=public --add-port=22/tcp ``` Se connecter depuis un poste sur le même réseau: `ssh liveuser@adresse_IP` ### Partionnement en mode su sudo -s Le disque : `lsblk` ``` nvme0n1 259:0 0 1,9T 0 disk ``` On partitionne un disque en 3 avec `gdisk` * Partition 1 : 512M EFI (code ef00) système de fichier FAT32 * Partition 2 : 1895G LVM (code 8e00) système de fichier EXT4 * Partition restante pour Installation temporaire Zapper le disque, (**Attention** Ceci effacera de manière irréversible toutes les données de votre disque, veuillez sauvegarder toutes les données importantes) : ``` sgdisk --zap-all /dev/nvme0n1 ``` Partitionnement du disque NVME 2To GPT + LVM Créer une table de partition GPT à l'aide de la commande `sgdisk` : ``` sgdisk --clear --new=1:0:+512MiB --typecode=1:ef00 --new=2:0:+1885G --typecode=2:8e00 /dev/nvme0n1 ``` Format la partition EFI mkfs.fat -F32 /dev/nvme0n1p1 ### Installer Eos XFCE Utilisation de Calamarès, cliquer sur **Démarrer l'installateur** Installation "en ligne" Bureau: XFCE4 Paquets : Tout sauf LTS Kernel Chargeur: systemd-boot Partitions: ![](/images/endos0007n.png){:width="600"} Utilisateur: yann Ordi: PC1 mot passe utilisateur identique admin Résumé: ![](/images/eos-lvm-luks03.png){:width="600"} Cliquer sur **Installer** ![](/images/eos-lvm-luks04.png){:width="600"} L'installation est terminée, cliquer "Redémarrer maintenant" et sur **Terminé** ### Créer nouveau système `Clé USB Eos Live insérée, redémarrer dans l'environnement Live-Cd`{:.info} `Clavier QWERTY!!!`{:.warning} Ouvrir un terminal Créer un accès sur la machine via SSH depuis un poste distant Lancer le service : `sudo systemctl start sshd` Ouvrir le port 22 firewall: `sudo firewall-cmd --zone=public --add-port=22/tcp` Créer un mot de passe à liveuser : `passwd liveuser` --> rtyuiop Relever l'adresse ip de la machine : `ip a` **Déchiffrer système temporaire** Le système temporaire chiffré `/dev/nvme0n1p3` Dans l'environnement live-CD, ouvrez un Terminal ,basculez en mode su et tapez (ou marquez et copiez la ligne avec ctrl-c et collez dans le terminal avec shift-ctrl-v ) … ```shell cryptsetup luksOpen /dev/nvme0n1p3 crypttemp # saisir la phrase mot de passe de l'installation mkdir -p /media/crypttemp mount /dev/mapper/crypttemp /media/crypttemp ``` Nos données d'installation temporaires sont désormais accessibles sous `/media/crypttemp` ``` bin boot dev efi etc home lib lib64 lost+found mnt opt proc root run sbin srv sys tmp usr var ``` **Créer nouveau système** Chiffrer la partition /dev/nvme0n1p2,saisir la passphrase définitive ```shell cryptsetup luksFormat --type luks2 /dev/nvme0n1p2 ``` Une demande de confirmation est exigée ``` WARNING! ======== This will overwrite data on /dev/nvme0n1p2 irrevocably. Are you sure? (Type 'yes' in capital letters): YES Enter passphrase for /dev/nvme0n1p2: Verify passphrase: ``` Choisissez un mot de passe sécurisé ( ) Ouvrir le nouveau système chiffré ```shell cryptsetup luksOpen /dev/nvme0n1p2 crypt # Enter passphrase for /dev/nvme0n1p2: pvcreate /dev/mapper/crypt # Physical volume "/dev/mapper/crypt" successfully created. vgcreate vg0 /dev/mapper/crypt # Volume group "vg0" successfully created ``` Une bonne taille de départ pour le volume racine (lvroot) est d'environ 30 Go. Si vous envisagez d'utiliser ultérieurement un fichier d'échange résidant sur root, vous devez en tenir compte. Le redimensionnement ultérieur des volumes est assez facile, alors n'y réfléchissez pas trop. Vous pouvez attribuer tout l'espace libre restant au volume d'accueil, `lvcreate --extents 100%FREE vg0 -n lvhome` mais pour augmenter les volumes plus tard et pour les instantanés , il faut de l'espace vide à l'intérieur du groupe de volumes, donc je choisis généralement une taille pour lvhome qui laisse environ 30 Go d'espace inutilisé global dans le volume groupe (en supposant un lecteur de 500 Go, par exemple 500 – 0,512 – 40 – 430 = 29,488) ```shell # 40G root dont 8 swapfile lvcreate -L 40G vg0 -n lvroot # Logical volume "lvroot" created. lvcreate -L 150G vg0 -n lvhome # Logical volume "lvhome" created. lvcreate -L 300G vg0 -n lvmedia # Logical volume "lvmedia" created. #lvcreate -l 100%FREE vg0 -n lvhome # Logical volume "lvhome" created. ``` Créez un système de fichiers ext4 sur les volumes logiques. ```shell mkfs.ext4 -L root /dev/mapper/vg0-lvroot mkfs.ext4 -L home /dev/mapper/vg0-lvhome mkfs.ext4 -L home /dev/mapper/vg0-lvmedia ``` ### Montage sur "mnt" Monter le nouveau système sur `/mnt` pour les systèmes UEFI ```shell mount /dev/mapper/vg0-lvroot /mnt mkdir -p /mnt/home mount /dev/mapper/vg0-lvhome /mnt/home mkdir -p /mnt/efi mount /dev/nvme0n1p1 /mnt/efi ``` ``` lsblk ``` devrait maintenant fournir une sortie similaire à la suivante (ignorez les tailles, celles-ci proviennent d'une installation de test) … pour les systèmes UEFI : ``` nvme0n1 259:0 0 1.9T 0 disk ├─nvme0n1p1 259:1 0 512M 0 part /mnt/efi ├─nvme0n1p2 259:2 0 1.8T 0 part │ └─crypt 254:3 0 1.8T 0 crypt │ ├─vg0-lvroot 254:4 0 40G 0 lvm /mnt │ ├─vg0-lvhome 254:5 0 150G 0 lvm /mnt/home │ └─vg0-lvmedia 254:6 0 300G 0 lvm └─nvme0n1p3 259:3 0 22.2G 0 part └─crypttemp 254:2 0 22.2G 0 crypt /media/crypttemp ``` ### Cloner système temporaire pour remplir les nouveaux points de montage ``` rsync -avA /media/crypttemp/ /mnt ``` *Veuillez patienter quelques minutes* ### Démonter système temporaire ```shell umount /media/crypttemp cryptsetup luksClose crypttemp ``` lsblk ``` nvme0n1 259:0 0 1.9T 0 disk ├─nvme0n1p1 259:1 0 512M 0 part /mnt/efi ├─nvme0n1p2 259:2 0 1.8T 0 part │ └─crypt 254:3 0 1.8T 0 crypt │ ├─vg0-lvroot 254:4 0 40G 0 lvm /mnt │ ├─vg0-lvhome 254:5 0 150G 0 lvm /mnt/home │ └─vg0-lvmedia 254:6 0 300G 0 lvm └─nvme0n1p3 259:3 0 22.2G 0 part ``` ### Configurer "crypttab" Configuration `/etc/crypttab` ``` cryptsetup luksUUID /dev/nvme0n1p2 ``` renvoie **5fa90f9d-ac40-4c70-8f58-730a423ce76b** Votre UUID sera différent, alors **assurez-vous d'utiliser votre UUID à l'étape suivante !** ``` nano /mnt/etc/crypttab ``` contient une ligne non commentée commençant par `luks-`... Remplacez cette ligne par la suivante ; **n'oubliez pas d' utiliser votre UUID** ``` cryptlvm UUID=5fa90f9d-ac40-4c70-8f58-730a423ce76b none luks ``` Sauvegarder et quitter. ### Basculer en chroot Passer en chroot ``` arch-chroot /mnt ``` le prompt `[root@EndeavourOS /]#` ### Configurer "fstab" Configurer /etc/fstab ``` blkid -s UUID -o value /dev/mapper/vg0-lvroot ``` renvoie l'UUID du volume racine : **04b9e250-1fcd-485b-989f-e753c89bf60f**. ``` blkid -s UUID -o value /dev/mapper/vg0-lvhome ``` renvoie l'UUID du volume d'accueil : **c35a3f8b-583b-4952-9ceb-f9a19194fa6c**. ``` nano /etc/fstab ``` contient une ligne commençant par `/dev/mapper/luks-`... **Supprimez** cette ligne et ajoutez ce qui suit (**n'oubliez pas d' utiliser vos UUID**) ``` UUID=04b9e250-1fcd-485b-989f-e753c89bf60f / ext4 noatime 0 0 UUID=c35a3f8b-583b-4952-9ceb-f9a19194fa6c /home ext4 noatime 0 0 ``` Sauvegarder et quitter. ### Options du noyau Dans **systemd-boot**, vous éditez le fichier d'entrée approprié qui se trouve sur votre partition EFI dans le répertoire `loader/entries` Chaque entrée est une option de démarrage dans le menu et chacune a une ligne appelée options. Vous pouvez modifier ces entrées directement, mais ces changements peuvent être écrasés lors de l'installation ou de la mise à jour de paquets. UUID de /dev/nvme0n1p2 : `blkid -s UUID -o value /dev/nvme0n1p2` Pour effectuer les changements, au lieu de modifier les entrées, modifiez le fichier `/etc/kernel/cmdline` qui est un fichier d'une ligne contenant une liste d'options du noyau. nano /etc/kernel/cmdline ``` nvme_load=YES nowatchdog rw rd.luks.uuid=5fa90f9d-ac40-4c70-8f58-730a423ce76b root=/dev/mapper/vg0-lvroot ``` Exécutez ensuite `sudo reinstall-kernels` qui remplira les entrées et régénérera les initrds. reinstall-kernels ### Sortie chroot ``` exit umount -R /mnt ``` Oter la clé USB , redémarrer ``` reboot ``` `FINI! Vous devriez maintenant avoir un système LVMonLUKS fonctionnel avec un volume logique séparé pour /home`{:.info} ## EndeavourOS chiffré LVM/LUKS ### Premier démarrage La partition est chiffrée ![](/images/eos-lvm-luks05.png) Au message "Please enter passphrase for disk endeavouros...", saisir la phrase mot de passe pour déchiffrer le disque #### Activation SSH Activer et lancer le service sudo systemctl enable sshd --now Autoriser ssh ```bash sudo firewall-cmd --zone=public --add-port=22/tcp ``` Relever adresse : `ip a` --> 192.168.0.37 Se connecter depuis un poste sur le même réseau: `ssh yann@192.168.0.37` #### Accès sudo Modifier sudoers pour accès sudo sans mot de passe à l'utilisateur yano ``` su # mot de passe root identique utilisateur echo "yann ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/20-yann exit # sortie su ``` #### Historique de la ligne de commande Ajoutez la recherche d’historique de la ligne de commande au terminal Se connecter en utilisateur Tapez un début de commande précédent, puis utilisez shift + up (flèche haut) pour rechercher l’historique filtré avec le début de la commande. ```shell # Global, tout utilisateur echo '"\e[1;2A": history-search-backward' | sudo tee -a /etc/inputrc echo '"\e[1;2B": history-search-forward' | sudo tee -a /etc/inputrc ``` #### Unités disques Liste : `lsblk` ``` NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 111,8G 0 disk └─sda1 8:1 0 111,8G 0 part └─ssd--120-lv120 254:1 0 111,8G 0 lvm sdb 8:16 0 476,9G 0 disk └─sdb1 8:17 0 476,9G 0 part └─ssd--512-virtuel 254:0 0 476,9G 0 lvm nvme0n1 259:0 0 1,9T 0 disk ├─nvme0n1p1 259:1 0 512M 0 part /efi ├─nvme0n1p2 259:2 0 1,8T 0 part │ └─cryptlvm 254:2 0 1,8T 0 crypt │ ├─vg0-lvroot 254:3 0 40G 0 lvm / │ ├─vg0-lvhome 254:4 0 150G 0 lvm /home │ └─vg0-lvmedia 254:5 0 300G 0 lvm └─nvme0n1p3 259:3 0 22,2G 0 part ``` Créer les points de montage ```bash sudo mkdir -p /srv/media sudo chown $USER:$USER /srv/media sudo mkdir -p /mnt/{ssd,sharenfs,FreeUSB2To} sudo chown $USER:$USER /mnt/{ssd,sharenfs,FreeUSB2To} sudo mkdir -p /virtuel sudo chown $USER:$USER /virtuel ``` Relever les UUID des unités : `sudo blkid` ``` /dev/mapper/ssd--120-lv120: UUID="6b48e98c-9b85-461b-9371-040765aae682" BLOCK_SIZE="4096" TYPE="ext4" /dev/nvme0n1p3: UUID="1a64bf47-fa14-4c9f-b8c4-7c3484f60e94" TYPE="crypto_LUKS" PARTLABEL="endeavouros" PARTUUID="22e5c948-0f32-44d2-9040-cde9534e34e7" /dev/nvme0n1p1: UUID="E522-8D8D" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="114324a5-4aa7-4ee5-a57e-8568ac5f2f74" /dev/nvme0n1p2: UUID="5fa90f9d-ac40-4c70-8f58-730a423ce76b" TYPE="crypto_LUKS" PARTUUID="c9640813-16da-4fde-87f6-98a5620e7b72" /dev/sdb1: UUID="AYko64-7Ysg-IK1P-2hCq-9MUo-VjQl-4NOuWY" TYPE="LVM2_member" PARTUUID="19dd6163-01" /dev/mapper/vg0-lvhome: LABEL="home" UUID="c35a3f8b-583b-4952-9ceb-f9a19194fa6c" BLOCK_SIZE="4096" TYPE="ext4" /dev/mapper/cryptlvm: UUID="LwRekN-16qI-L1Nf-WfEY-OLgo-rd3A-XTE3Fg" TYPE="LVM2_member" /dev/mapper/ssd--512-virtuel: UUID="84bc1aa9-23ac-4530-b861-bc33171b7b42" BLOCK_SIZE="4096" TYPE="ext4" /dev/sda1: UUID="o2NaLz-2Biv-Dx3C-LYJD-vuyp-1Ogl-Oa4Iu2" TYPE="LVM2_member" PARTLABEL="Linux LVM" PARTUUID="3eee16e4-fe68-42bf-861a-cd9e46d22805" /dev/mapper/vg0-lvmedia: LABEL="home" UUID="0e48444f-104c-4ba0-8b55-5d38ea0583ee" BLOCK_SIZE="4096" TYPE="ext4" /dev/mapper/vg0-lvroot: LABEL="root" UUID="04b9e250-1fcd-485b-989f-e753c89bf60f" BLOCK_SIZE="4096" TYPE="ext4" ``` Ajout au fichier `/etc/fstab` ``` # /dev/mapper/vg0-lvmedia UUID=0e48444f-104c-4ba0-8b55-5d38ea0583ee /srv/media ext4 rw,relatime 0 2 # /dev/mapper/ssd--512-virtuel UUID=84bc1aa9-23ac-4530-b861-bc33171b7b42 /virtuel ext4 defaults 0 2 # /dev/mapper/ssd--120-lv120 UUID=6b48e98c-9b85-461b-9371-040765aae682 /mnt/ssd ext4 defaults 0 2 ``` Recharger et monter les unités sudo systemctl daemon-reload sudo mount -a **Restauration des données /srv/data** ```bash sudo -s rsync -avA /mnt/ssd/lvmedia/ /srv/media ``` Les dossiers musicyan et dplus sont ailleurs ```bash mkdir /srv/media/{musicyan,dplus} sudo -s rsync -avA /virtuel/musicyan/* /srv/media/musicyan/ rsync -avA /virtuel/dplus/* /srv/media/dplus/ ``` Suppression des dossiers de sauvegardes ```bash sudo rm -r /mnt/ssd/lvmedia sudo rm -r /virtuel/{musicyan,dplus} ``` ### Mise à jour Système Mode terminal yay -Syu Mode graphique ![](/images/plasma-kde01.png) ### Réseau * [Réseau - Doc RedHat](https://docs.redhat.com/fr/documentation/red_hat_enterprise_linux/9/html/configuring_and_managing_networking/configuring-a-network-bridge_configuring-and-managing-networking#configuring-a-network-bridge-by-using-nmcli_configuring-a-network-bridge) * [Réseau NetworkManager - nmcli](/2024/10/31/NetworkManager-nmcli.html) #### Interface pont (bridge) **Créer une interface de pont** nmcli connection add type bridge con-name bridge0 ifname bridge0 *Connexion « bridge0 » (c692299c-5076-4b84-adfb-913e154ebf46) ajoutée avec succès.* Affichez les interfaces réseau et notez les noms des interfaces que vous souhaitez ajouter au pont nmcli device status ``` DEVICE TYPE STATE CONNECTION enp0s31f6 ethernet connecté eth_enp0s31f6 bridge0 bridge connexion (obtention de la configuration IP) bridge0 lo loopback connecté (en externe) lo wg0-mullvad wireguard connecté (en externe) wg0-mullvad enp3s0f0 ethernet déconnecté -- enp3s0f1 ethernet indisponible -- ``` **Attribuer les interfaces au pont.** *Si les interfaces que vous souhaitez affecter au pont ne sont pas configurées, créez de nouveaux profils de connexion pour elles* nmcli connection add type ethernet slave-type bridge con-name bridge0-port1 ifname enp3s0f0 master bridge0 *Connexion « bridge0-port1 » (34425bb4-3d61-4e6c-81c1-6f76ffe78539) ajoutée avec succès.* **Paramétrage pont** * Utiliser le DHCP, aucune action n'est nécessaire * Définir une adresse IPv4 statique, un masque de réseau, une passerelle par défaut pour la connexion bridge0 : `nmcli connection modify bridge0 ipv4.addresses '192.168.10.2/24' ipv4.gateway '192.168.10.1' ipv4.method manual` * Désactiver ipv6 : `nmcli connection modify bridge0 ipv6.method disabled` Activer la connexion pont nmcli connection up bridge0 *Connexion activée (controller waiting for ports) (Chemin D-Bus actif : /org/freedesktop/NetworkManager/ActiveConnection/6)* Vérifiez que les ports sont connectés et que la colonne CONNECTION affiche le nom de connexion du port nmcli device ``` DEVICE TYPE STATE CONNECTION enp0s31f6 ethernet connecté eth_enp0s31f6 bridge0 bridge connecté bridge0 enp3s0f0 ethernet connecté bridge0-port1 lo loopback connecté (en externe) lo enp3s0f1 ethernet indisponible -- ``` #### Priorité réseau L'ordinateur de bureau PC1 a 3 cartes réseau Souvent, les périphériques intégrés disposent de plusieurs interfaces réseau disponibles simultanément, comme les routeurs réseau dotés d'interfaces filaires et sans fil. Ces périphériques doivent pouvoir sélectionner automatiquement une interface réseau préférée. Pour y parvenir sur une machine Linux, chaque interface possède une valeur métrique qui indique le coût d'utilisation de l'interface. ([Changing the Network Routing Metric Permanently](https://www.baeldung.com/linux/change-network-routing-metric)) {:.info} `La connexion au réseau 192.168.0.0/24 via NetworkManager ne se fait pas correctement car il peut se connecter au réseau 192.168.10.0/24`{:.warning} Il faut donner la priorité au réseau 192.168.0.0/24 Commande `nmcli device` ``` enp0s31f6 ethernet connecté eth_enp0s31f6 bridge0 bridge connecté bridge0 enp3s0f0 ethernet connecté bridge0-port1 ... ``` **Obtenir la valeur métrique** Obtenons la valeur métrique initiale de nos interfaces réseau. Pour cela, nous utilisons la commande suivante ip route ``` default via 192.168.0.254 dev enp0s31f6 proto static metric 100 default via 192.168.10.1 dev bridge0 proto static metric 425 ... ``` Il s'agit de la table de routage pour les interfaces enp0s31f6 et bridge0 A la fin de chaque ligne, nous pouvons voir une valeur métrique **Modifier la valeur métrique** Commande nmcli pour modifier la valeur métrique de l' interface sudo nmcli connection modify 'eth_enp0s31f6' ipv4.route-metric 10 Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2) La connexion avec une nouvelle valeur métrique est désormais active. Si nous vérifions la table de routage, nous devrions pouvoir voir la nouvelle valeur métrique ip route ``` default via 192.168.0.254 dev enp0s31f6 proto static metric 10 default via 192.168.10.1 dev bridge0 proto static metric 425 ... ``` L' interface **enp0s31f6** a désormais une valeur métrique de 10 #### Ajout carte réseau 2.5Ghz *Carte tp-link pcie 2.5Ghz TX201* ![](/images/Tx201-tp-link.png){:height="200"} Liste des périphèriques réseau ip link ![](/images/Tx201-tp-link01.png) enp2s0 : carte tp-link 2.5ghz créer un nouveau profil de connexion, par exemple sous le nom “tp-link” nmcli connection add con-name tp-link ifname enp2s0 type ethernet activer le profil. sudo nmcli connection up tp-link Les périphériques nmcli device ![](/images/Tx201-tp-link02.png) Profil "tp-link": enp2s0 f0:09:0d:fa:af:ff Désactiver le profil eth_enp0s31f6 sudo nmcli connection down eth_enp0s31f6 *Connexion « eth_enp0s31f6 » désactivée (chemin D-Bus actif : /org/freedesktop/NetworkManager/ActiveConnection/8)* ![](/images/Tx201-tp-link03.png) Débrancher le câble réseau ![](/images/Tx201-tp-link04.png) Désactiver le périphérique réseau embarqué "enp0s31f6" via le BIOS Après redémarrage ![](/images/Tx201-tp-link05.png) Les métriques ![](/images/Tx201-tp-link06.png) ### Partage disque [Partage disque externe USB sur Freebox](/2022/08/03/Partage_disque_externe_USB_sur_Freebox.html) #### Disque freebox partagé FreeUSB2To **FreeBox** HDD Mobile 2To connecté en USB sur la freebox Nom de partage : FreeUSB2To + EXT4 + vérification après formatage Partage windows activé : yannfreebox + mot de passe **PC1** Partage linux samba : `sudo pacman -S cifs-utils` Installé par défaut Point de montage : `sudo mkdir -p /mnt/FreeUSB2To` Lien : `sudo ln -s /mnt/FreeUSB2To $HOME/FreeUSB2To` Credential : `/root/.smbcredentials` avec 2 lignes username=XXXXXX password=XXXXXX Droits ```shell sudo chown -R root:root /root/.smbcredentials sudo chmod -R 600 /root/.smbcredentials ``` Les fichiers systèmes ``` # /etc/systemd/system/mnt-FreeUSB2To.mount [Unit] Description=cifs mount script Requires=network-online.target After=network-online.service [Mount] What=//192.168.0.254/FreeUSB2To Where=/mnt/FreeUSB2To Options=credentials=/root/.smbcredentials,rw,uid=1000,gid=1000,vers=3.0 Type=cifs [Install] WantedBy=multi-user.target # /etc/systemd/system/mnt-FreeUSB2To.automount [Unit] Description=cifs mount script Requires=network-online.target After=network-online.service [Automount] Where=/mnt/FreeUSB2To TimeoutIdleSec=10 [Install] WantedBy=multi-user.target ``` Activation sudo systemctl enable mnt-FreeUSB2To.automount --now #### Partage avec Lenovo serveur NFS **PC1** Points de montage : `sudo mkdir -p /mnt/sharenfs` Lien : `sudo ln -s /mnt/sharenfs $HOME/sharenfs` Ajouter les points de montage du serveur nfs au fichier `/etc/fstab` ``` # Les montage NFS du serveur lenovo 192.168.0.215 192.168.0.215:/sharenfs /mnt/sharenfs nfs4 nofail,x-systemd.automount,x-systemd.requires=network-online.target,x-systemd.device-timeout=10s,rsize=8192,wsize=8192 0 0 ``` Rechargement et montage sudo systemctl daemon-reload && sudo mount -a Points de montage : `sudo mkdir -p /mnt/nfs-ssd` Lien : `sudo ln -s /mnt/nfs-ssd $HOME/nfs-ssd` Ajouter les points de montage du serveur nfs au fichier `/etc/fstab` ``` 192.168.0.215:/mnt/nfs-ssd /mnt/nfs-ssd nfs4 nofail,x-systemd.automount,x-systemd.requires=network-online.target,x-systemd.device-timeout=10s,rsize=8192,wsize=8192 0 0 ``` Rechargement et montage sudo systemctl daemon-reload && sudo mount -a #### Dossiers et Liens Les dossiers et **Liens sur les autres unités** et les dossiers `.keepassx` , `Notes` , `scripts` `statique/images` et `statique/_posts` ``` sudo mkdir -p /srv/media/{Notes,statique} sudo mkdir -p /srv/media/statique/{images,_posts} sudo ln -s /srv/media $HOME/media sudo mkdir -p /virtuel sudo ln -s /virtuel $HOME/virtuel mkdir -p ~/{.ssh,.keepassx} sudo mkdir -p /mnt/sharenfs/scripts sudo chown $USER:$USER -R /mnt/sharenfs/scripts ``` Créer liens sharenfs ```bash ln -s /mnt/sharenfs/pc1/.borg $HOME/Private/.borg ln -s /mnt/sharenfs/scripts $HOME/scripts ``` **Liens "statique" et "Notes"** les liens pour la rédaction des posts markdown et le dossier des fichiers ```bash # Lien pour affichage des images avec éditeur Retext sudo ln -s /srv/media/statique/images /images # Lien pour les fichiers autres sudo ln -s /srv/media/statique/files /files ``` **Dossiers Documents et Musique** Supprimer les dossiers par défaut Documents et Musique et créer des liens ``` # suppression Documents et Musique sudo rm -r $HOME/Documents sudo rm -r $HOME/Musique #Création des liens sudo ln -s /srv/media/Documents $HOME/Documents sudo ln -s /mnt/sharenfs/Musique $HOME/Musique ``` ### Mise à jour EndeavourOS **Mode graphique** ![](/images/eos-cassini-009.png){:width="400"} ![](/images/eos-cassini-009a.png){:width="400"} ![](/images/eos-cassini-009c.png){:width="300"} ![](/images/eos-cassini-010.png){:width="400"} ![](/images/eos-cassini-010a.png){:width="400"} ![](/images/eos-cassini-010b.png){:width="300"} ![](/images/eos-cassini-011.png){:width="400"} ![](/images/eos-cassini-011a.png){:width="400"} ![](/images/eos-cassini-011b.png){:width="300"} ![](/images/eos-cassini-011c.png){:width="400"} **Résumé** ![](/images/eos-welcome.png) ### Paramètres XFCE On déplace le **tableau de bord** du bas vers le haut de l'écran Gestion des 2 écrans * Sharp en primaire Modification du **tableau de bord** , clic-droit → Tableau de bord → Préférences de tableau de bord → Eléments Affichage date et heure ![](/images/eos-cassini-012.png) ou **format personnalisé** dans **Horloge** : `%e %b %Y %R` Gestionnaire d'alimentation ![](/images/alimentation01.png){:width="400"} ![](/images/alimentation02.png){:width="400"} Supprimer icône alimentation dans la barre des tâches ![](/images/alimentation03.png) Apparence ![](/images/apparence.png){:width="300"}![](/images/apparence-icones.png){:width="300"} Economiseur d'écran ![](/images/economiseur01.png){:width="400"} ![](/images/economiseur02.png){:width="400"} Deux cartes réseau sont installés ![](/images/reseau01.png){:width="400"} ![](/images/reseau02.png){:width="400"} ![](/images/reseau03.png){:width="400"} ### LightDM *Utilise `lightdm-slick-greeter` Un greeter basé sur GTK plus axé sur l'apparence que `lightdm-gtk-greeter`* Les paramètres sont dans le fichier `/etc/lightdm/slick-greeter.conf` ``` [Greeter] background=/srv/media/dplus/images/Fonds/wp2618258.jpg draw-user-backgrounds=false draw-grid=false theme-name=Arc-Dark icon-theme-name=Qogir cursor-theme-name=Qogir cursor-theme-size=16 show-a11y=false show-power=false background-color=#000000 ``` Démarre auto ou pas de la session, modifier le fichier `/etc/lightdm/lightdm.conf` ', (début ligne sans ou avec commentaire `#`) sudo nano /etc/lightdm/lightdm.conf ``` [Seat:*] autologin-user=yann ``` Ecran principal pour la fenêtre de connexion : [EndeavourOS XFCE - LightDM sur les systèmes multi-affichages](/2023/08/02/EndeavourOS_XFCE_-_Environnements_de_bureau_LightDM.html) Si vous changez l'image de fond, il désactiver draw-grid ``` background=/usr/share/endeavouros/backgrounds/light_sky_stars_85555_1366x768_yano.jpg draw-grid=false ``` ### Déverrouillage des volumes LUKS2 Description * Slot 0 pour le déverrouillage du volume par saisie d'une phrase mot de passe. * Slot 1 ,2 et 3 pour le déverrouillage par des clés avec un appui sur une touche. * Slot 4 - Ajout d'une phrase mot de passe pour le recovery (OPTION) Au final nous aurons 4 "slot" utilisés Installer librairie libfido2 pour la prise en charge des clés Yubico et SoloKeys sudo pacman -S libfido2 #### Enroler clé USB YubiKey 5 NFC ![](/images/yubikey5nfc.png){:height="150"} Vérifier que la YubiKey est insérée dans un port USB Lister et enroler la yubikey sudo systemd-cryptenroll --fido2-device=list ``` PATH MANUFACTURER PRODUCT /dev/hidraw5 Yubico YubiKey OTP+FIDO+CCID ``` Enroler la clé pour le déverrouillage du disque chiffré nvme0n1p2 sudo systemd-cryptenroll --fido2-device=auto /dev/nvme0n1p2 ``` 🔐 Please enter current passphrase for disk /dev/nvme0n1p2: ********************* Requested to lock with PIN, but FIDO2 device /dev/hidraw5 does not support it, disabling. Initializing FIDO2 credential on security token. 👆 (Hint: This might require confirmation of user presence on security token.) Generating secret key on FIDO2 security token. 👆 In order to allow secret key generation, please confirm presence on security token. New FIDO2 token enrolled as key slot 1. ``` Le **Y** de la clé se met à clignoter , il suffit de poser son doigt sur l'emplacement du **Y** pour le déverrouillage {:.info} Retirer la première clé et répéter l'opération ci-dessus pour les autres clés #### Enroler une passphrase de recouvrement (OPTION) Les jetons et puces de sécurité FIDO2, PKCS#11 et TPM2 s'associent bien avec les clés de recouvrement : puisque vous n'avez plus besoin de taper votre mot de passe tous les jours, il est logique de vous en débarrasser et d'enregistrer à la place une clé de recouvrement à forte entropie que vous imprimez ou scannez hors écran et conservez dans un endroit physique sûr. Voici comment procéder : sudo systemd-cryptenroll --recovery-key /dev/nvme0n1p2 ``` 🔐 Please enter current passphrase for disk /dev/nvme0n1p2: *********** A secret recovery key has been generated for this volume: 🔐 vbcrnbjn-vkrkihte-rctbufne-nlihihjl-tegudteu-rkjthcgd-hvhuvgik-rugeregh Please save this secret recovery key at a secure location. It may be used to regain access to the volume if the other configured access credentials have been lost or forgotten. The recovery key may be entered in place of a password whenever authentication is requested. New recovery key enrolled as key slot 3. ``` Cette opération génère une clé, l'enregistre dans le volume LUKS2, l'affiche à l'écran et génère un code QR que vous pouvez scanner en dehors de l'écran si vous le souhaitez. La clé possède la plus grande entropie et peut être saisie partout où vous pouvez saisir une phrase d'authentification. C'est pourquoi il n'est pas nécessaire de modifier le fichier /etc/crypttab pour que la clé de récupération fonctionne. #### Enroler une clé USB SoloKeys (OPTIONNEL) ![](/images/solokeys.png) Lister la clé systemd-cryptenroll --fido2-device=list ``` PATH MANUFACTURER PRODUCT /dev/hidraw4 SoloKeys Solo 4.1.5 ``` Ajout de la solokeys sudo systemd-cryptenroll --fido2-device=auto /dev/nvme0n1p2 ``` 🔐 Please enter current passphrase for disk /dev/nvme0n1p2: *********** Requested to lock with PIN, but FIDO2 device /dev/hidraw1 does not support it, disabling. Initializing FIDO2 credential on security token. 👆 (Hint: This might require confirmation of user presence on security token.) Generating secret key on FIDO2 security token. 👆 In order to allow secret key generation, please confirm presence on security token. New FIDO2 token enrolled as key slot 3. ``` Lors du boot , le **S** de la SoloKeys passe au ROUGE et il suffit d'appuyer sur le voyant pour qu'il repasse au vert afin de lancer le processus de déchiffrement et finir le démarrage {:.info} #### Prise en charge YubiKey et SoloKey Les options timeout de [crypttab](https://www.man7.org/linux/man-pages/man5/crypttab.5.html) ``` timeout= Spécifie le délai d'attente pour la demande d'un mot de passe. Si aucune unité n'est spécifiée, l'unité utilisée est la seconde. Les unités prises en charge sont s, ms, us, min, h, d. Un délai de 0 permet d'attendre indéfiniment (valeur par défaut). token-timeout= Spécifie le temps d'attente maximum pour que les dispositifs de sécurité configurés (c'est-à-dire FIDO2, PKCS#11, TPM2) apparaissent. configurés (c'est-à-dire FIDO2, PKCS#11, TPM2). Prend une valeur en secondes (mais d'autres unités de temps peuvent être spécifiées, voir systemd.time(7) pour les formats supportés). La valeur par défaut est 30s. Une fois le délai spécifié écoulé, l'authentification par mot de passe est tentée. Notez que ce délai s'applique à l'attente de l'apparition du dispositif de sécurité - il ne s'applique pas ne s'applique pas à la demande de code PIN pour le dispositif (le cas échéant) ou autre. Passez 0 pour désactiver le délai et attendre indéfiniment. ``` Configurer /etc/crypttab pour la prise en charge des clés sudo nano /etc/crypttab ``` # #cryptlvm UUID=5fa90f9d-ac40-4c70-8f58-730a423ce76b /crypto_keyfile.bin luks cryptlvm UUID=5fa90f9d-ac40-4c70-8f58-730a423ce76b - fido2-device=auto,token-timeout=20s ``` `token-timeout=20s` --> Si aucune clé n'est connectée , le mot de passe devra être saisi après 20 secondes de délai Sauvegarder et quitter. Réinitialiser sudo reinstall-kernels `Redémarrer la machine`{:.info} #### Plymouth - Processus de démarrage graphique [Plymouth - Processus de démarrage graphique](/2023/10/14/Plymouth_Processus_de_demarrage_graphique.html) ### Installation Paquets On commence par tout ce qui est graphique : gimp, cups (gestion de l’imprimante) et hplip (si vous avez une imprimante scanner Hewlett Packard). Le paquet python-pyqt5 est indispensable pour l’interface graphique de HPLIP+scan. Webkigtk2 étant indispensable pour la lecture de l’aide en ligne de Gimp. outil rsync, Retext éditeur markdown, firefox fr, thunderbird, libreoffice, gdisk, bluefish, **Double Commander** , **Menulibre** pour la gestion des menus , outils android clementine ```bash yay -S cups system-config-printer gimp hplip libreoffice-fresh-fr thunderbird-i18n-fr jq figlet p7zip tmux calibre retext bluefish gedit doublecmd-gtk2 terminator filezilla minicom zenity android-tools yt-dlp qrencode zbar xclip nmap jre-openjdk-headless openbsd-netcat borg xterm gparted tigervnc xournalpp qbittorrent ldns strawberry # Autres avec compilation yay -S freetube-bin signal-desktop xsane # Gestion des menus du bureau, construction du paquet avant installation yay -S menulibre ``` * **System-config-printer** est une interface graphique écrite en Python et qui utilise Gtk+ pour configurer un serveur CUPS. Son but premier est de configurer le système d'impression sur l'hôte local, mais il peut également configurer une imprimante distante. * **HPLIP** est un ensemble de pilotes pour l'impression sous GNU / Linux des imprimantes Hewlett Packard. * **FIGlet** est un logiciel qui crée des bannières textuelles dans différentes polices d'écriture * **Jq** est un programme qui permet de filtrer, découper, transformer et grouper des données JSON facilement. * **p7zip** est le portage en ligne de commande Unix de 7-Zip, un archiveur de fichier qui compresse avec des gros ratios de compression. * **Tmux** est un outil qui permet d'exploiter plusieurs terminaux au sein d'un seul affichage. * **calibre** est un logiciel gratuit et open source qui vous permet de gérer, convertir et synchroniser vos livres numériques. * **ReText** est multiplateforme et écrit en Python. Il permet d’éditer des documents au balisage léger, en particulier le Markdown, et peut afficher le rendu HTML, en écran partagé * **Bluefish** est un éditeur de texte dédié à la programmation informatique. Il se distingue notamment par ses nombreux outils et par la longue liste de langages de développement compatibles. * **Double Commander** est un gestionnaire de fichiers multiplateforme au source ouvert avec deux panneaux côte à côte. * **Terminator** est un terminal virtuel qui a la particularité de permettre de partager la fenêtre selon vos envies et ainsi organiser plus simplement vos différentes fenêtres. * **FileZilla** est un logiciel qui vous permet de transférer des fichiers entre votre ordinateur et un serveur distant. Il est compatible avec Windows, Mac, Linux et les protocoles FTP, FTPS et SFTP. * **Minicom** est un programme de contrôle de modem et d'émulation de terminal pour les Unix-like. Il permet de configurer des équipements réseaux via leur port console, comme les routeurs Cisco. * **Zenity** est un outil qui permet d'afficher des boîtes de dialogue GTK+ depuis la ligne de commandes ou au travers de scripts shell * **Android SDK Platform-Tools** (ADB) est l'outil officiel de Google qui permet d'utiliser les commandes ADB sur les appareils Android. * **yt-dlp**, script écrit en Python, est un logiciel open source qui permet de télécharger des vidéos à partir de plusieurs sites de partage de vidéos, notamment YouTube * **Qrencode** est une bibliothèque rapide et compacte pour l'encodage de données en QR Code, un symbole 2D qui peut être scanné par un téléphone portable * **ZBar** est un logiciel de lecture de codes-barres à partir de diverses sources, telles que les flux vidéo, les fichiers d'images et les capteurs d'intensité brute. Il prend en charge de nombreuses symbologies courantes, dispose d'une mise en œuvre souple et en couches et d'un code de petite taille, et convient à une utilisation embarquée. * **Xournal** est un outil open source permettant d'annoter des fichiers PDF. Il prend en charge la saisie au stylo, à la souris et au clavier. Il est couramment utilisé, avec Xournal++, pour ajouter des annotations et des signatures électroniques aux fichiers PDF, en particulier sur les ordinateurs de bureau Linux. * **TigerVNC** (de l'anglais, « Tiger Virtual Network Computing ») est un système pour le partage de bureau graphique vous permettant de contrôler d'autres ordinateurs à distance. * **Borg Backup** (Borg en abrégé) est un programme de sauvegarde incrémentielle en ligne de commande. * **qBittorrent** est un client Bittorrent gratuit et fiable qui vous permet de télécharger et de partager des fichiers via le protocole BitTorrent * **Xclip** Cette application permet d'utiliser le presse-papier en ligne de commande. Elle permet notamment de rediriger la sortie standard d'une commande directement vers le presse-papier, afin de pouvoir s'en servir immédiatement. * **ldns** est une bibliothèque DNS rapide avec le but de simplifier la programmation DNS et pour permettre aux développeurs de facilement créer des programmes qui soient conformes aux RFC actuelles et aux brouillons Internet. * **Nmap** (« Network Mapper ») est un outil open source d'exploration réseau et d'audit de sécurité. Il a été conçu pour rapidement scanner de grands réseaux, mais il fonctionne aussi très bien sur une cible unique. * **GParted** est une application de gestion et d'organisation de partitions distribuée sous licence libre GPLv2. Elle permet de créer, d'effacer et de modifier les partitions de vos disques durs, clés USB, cartes SD, etc. * **openbsd-netcat** L'utilitaire nc (ou netcat) est utilisé pour tout ce qui concerne TCP, UDP ou les sockets du domaine UNIX. Il peut ouvrir des connexions TCP, envoyer des paquets UDP, écouter sur des ports TCP et UDP arbitraires, effectuer un balayage des ports et gérer à la fois IPv4 et IPv6. * **xterm** est l'émulateur de terminal standard pour l'environnement graphique X Window System. Un utilisateur peut disposer de plusieurs instances de xterm simultanément dans le même écran, chacune d'entre elles offrant des entrées/sorties indépendantes pour les processus qui s'y exécutent * **Strawberry Music Player** excelle par la richesse de ses fonctionnalités. Outre la lecture de musique, l'utilisateur peut créer et gérer des playlists, organiser aisément sa collection selon divers critères, et même éditer les tags des pistes audio. * **FreeTube** est un client privé multiplateforme qui vous permet de regarder YouTube sur votre ordinateur en toute tranquillité. * **Signal**, l'équivalent libre de WhatsApp. Signal est une application de messagerie similaire à WhatsApp, mais étant plus indépendante. Elle permet aux utilisateurs de se transmettre des messages, des photos, des vidéos et des documents. La transmission des messages est chiffrée de bout en bout. * **XSane** a été conçu pour l'acquisition d'images avec votre scanner. Vous pouvez scanner un fichier, faire une photocopie, créer un fax, créer un courriel, et enfin démarrer xSane à partir de GIMP avec un greffon spécifique. * **MenuLibre** est un éditeur de menu pour les environnements de bureau tels que Budgie, LXDE (Lubuntu), XFCE (Xubuntu), et également GNOME ou Unity. ### ReText Fichier de configuration `~/.config/ReText project/ReText.conf` ```conf [General] appStyleSheet=/home/yann/.config/ReText project/retext.qss defaultPreviewState=normal-preview recentFileList= styleSheet=/home/yann/.config/ReText project/retext.css useWebEngine=true useWebKit=true ``` Les fichiers retext.css et retext.qss
Etendre Réduire retext.css {% highlight css %} body { font-family: Helvetica, Arial, sans-serif; font-size: 15px; line-height: 1.3; color: #f6e6cc; width: 700px; margin: auto; /*background: #27221a;*/ background: #121212; position: relative; padding: 0 30px; } body>:first-child { margin-top:0!important; } img { max-width: 100%; } table { width: 100%; border-collapse: collapse; } th { background-color: rgba(0, 0, 0, 0.3); } table, th, td { padding: 5px; border: 1px solid rgba(0, 0, 0, 0.3); border-radius: 0.4em; -moz-border-radius: 0.4em; -webkit-border-radius: 0.4em; } tr:nth-child(even) { background-color: rgba(0, 0, 0, 0.3); } p, ul, ol, dl, table, pre { margin-bottom: 1em; } ul { margin-left: 20px; } a { text-decoration: none; cursor: pointer; color: #ba832c; font-weight: bold; } a:focus { outline: 1px dotted; } a:visited {} a:hover, a:focus { color: #d3a459; text-decoration: none; } a *, button * { cursor: pointer; } hr { display: none; } small { font-size: 90%; } input, select, button, textarea, option { font-family: Arial, "Lucida Grande", "Lucida Sans Unicode", Arial, Verdana, sans-serif; font-size: 100%; } button, label, select, option, input[type=submit] { cursor: pointer; } sup { font-size: 80%; line-height: 1; vertical-align: super; } h1, h2, h3, h4, h5, h6 { line-height: 1.1; font-family: Baskerville, "Goudy Old Style", "Palatino", "Book Antiqua", serif; } h1 { font-size: 24pt; margin: 1em 0 0.1em; } h2 { font-size: 22pt; } h3 { font-size: 20pt; } h4 { font-size: 18pt; } h5 { font-size: 16pt; } h6 { font-size: 14pt; } h1 a, h1 a:hover { color: #d7af72; font-weight: normal; text-decoration: none; } ::selection { background: #745626; } ::-moz-selection { background: #745626; } pre { background: #1B1812; color: #fff; padding: 8px 10px; overflow-x: hidden; } pre code { font-size: 10pt; } {% endhighlight %}
Fichier retext.qss ```css QTextEdit { color: black; background-color: white; } ``` ### Tmux
Etendre Réduire fichier de configuration "~/.tmux.conf" {% highlight text %} #Configuration de tmux #Origine : http://denisrosenkranz.com #Yannick juin 2017 # Copier/Coller par la souris se fait avec la touche "Shift" appuyée ################################## #Changements des raccourcis claviers ################################## #On change Control +b par Control +x #set -g prefix C-x #unbind C-b #bind C-x send-prefix #On utilise control + flèches pour naviguer entre les terminaux bind-key -n C-right next bind-key -n C-left prev #on utilise alt + flèches our naviguer entre les panels bind-key -n M-left select-pane -L bind-key -n M-right select-pane -R bind-key -n M-up select-pane -U bind-key -n M-down select-pane -D #On change les raccourcis pour faire du split vertical et horizontal #On utilise la touche "|" (pipe) pour faire un split vertical bind | split-window -h #Et la touche "-" pour faire un split horizontal bind - split-window -v ################################## #Changements pratiques ################################## #On permet l'utilisation de la souris pour changer de terminal et de panel set -g mouse on # Sélection zone par clic gauche souris (texte sélectionné sur fond jaune) # Après relachement du clic , le texte sélectionné est copié dans le presse-papier # Le fond jaune disparaît set-option -s set-clipboard off # For emacs copy mode bindings # Il faut installer l'utilitaire 'xclip' (sudo pacman -S xclip) bind-key -T copy-mode MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i" #Les fenêtres commencent par 1 et non par 0 set -g base-index 1 ################################## #Changements visuels ################################## #On met les panneaux non actif en gris #set -g pane-border-fg colour244 #set -g pane-border-bg default #On met le panneau actif en rouge #set -g pane-active-border-fg colour124 #set -g pane-active-border-bg default #On met la barre de status en gris set -g status-fg colour235 set -g status-bg colour250 #set -g status-attr dim # On surligne les fenêtres actives dans la barre de status en gris foncés #set-window-option -g window-status-current-fg colour15 #set-window-option -g window-status-current-bg colour0 {% endhighlight %}
### Minicom Paramétrage de l'application terminale **minicom** sudo minicom -s >Seul les paramètres à modifier sont cités Configuration du port série ![](/images/minicom01.png) A - Port série : **/dev/ttyUSB0** F - Contrôle de flux matériel : **Non** ![](/images/minicom02.png) Echap Enregistrer config. sous dfl ![](/images/minicom03.png) Sortir de Minicom ### Flameshot (copie écran) **Copie écran (flameshot)** **[Flameshot](https://github.com/lupoDharkael/flameshot)** c’est un peu THE TOOL pour faire des captures d’écrans yay -S flameshot Lancer l'application XFCE Flameshot et l'icône est visible dans la barre des tâches ![](/images/flameshot_e6230-1a.png){:width="300"} Paramétrage de flameshot, clic droit sur icône , Configuration ![](/images/flameshot_e6230-1b.png){:width="300"} Paramétrage de flameshot ![](/images/flameshot01.png){:width="300"} ### scrpy émulation android Utilise adb et le port USB yay -S scrcpy ### Client Nextcloud Installation client nextcloud yay -S nextcloud-client libgnome-keyring gnome-keyring Démarrer le client nextcloud , après avoir renseigné l'url ,login et mot de passe pour la connexion Trousseau de clé avec mot de passe idem connexion utilisateur Paramétrage * Menu → Lancer **Client de synchronisation nextcloud** * Adresse du serveur : ![](/images/nextcloud_xfce01.png){:width="300"} * Nom d’utilisateur : yann * Mot de passe : xxxxx ![](/images/nextcloud_xfce02.png){:width="200"} ![](/images/nextcloud_xfce03.png){:width="300"} ![](/images/nextcloud_xfce04.png){:width="200"} * Sauter les dossiers à synchroniser, Ignorer la configuration des dossiers * Trousseau de clés = mot de passe connexion utilisateur ![](/images/nextcloud_xfce05.png){:width="400"} * Paramètres nextcloud ![](/images/e6230-nextcloud-a.png){:width="400"} Saisir les différents dossiers à synhroniser ![](/images/e6230-nextcloud.png){:width="400"} Au prochain redémarrage, il faudra confirmer le mot de passe du trousseau ### Gestion mot de passe (keepassxc) ![](/images/KeePassXC.png){:width="50"} Ajouter une synchronisation de dossier nextcloud : /home/yann/.keepassx (local) → Home/.keepasx (serveur) Installer keepassxc yay -S keepassxc Ajouter aux favoris "KeepassXC" et lancer l'application → **Ouvrir une base de données existante** Base de données --> Ouvrir une base de données (afficher les fichiers cachés) : **~/.keepassx/yannick_xc.kdbx** --> Ouvrir ![](/images/e6230-keepassx01.png){:width="400"} **Affichage → Thème** : Sombre **Affichage → Mode compact** , un redémarrage de l'application est nécessaire Déverrouillage avec clé matérielle ### SSHFS (facultatif) ![](/images/sshfs-logo.png){:width="50"} *SSHFS sert à monter sur son système de fichier, un autre système de fichier distant, à travers une connexion SSH, le tout avec des droits utilisateur.* Installer paquet SSHFS sudo pacman -S sshfs sshfs est installé par défaut sur la distribution EndeavourOS {:.warning} Création des partages utilisés par sshfs (facultatif) mkdir -p $HOME/vps/{borgbackup,lxc,vdb,xoyaz.xyz,xoyize.xyz} Exemple de montage manuel `sshfs -oIdentityFile= utilisateur@domaine.tld: -C -p ` ### Gestionnaire de fichiers *Double Commander est un gestionnaire de fichiers open source multiplateforme avec deux panneaux côte à côte. Il s'inspire de Total Commander* Application GTK yay -S doublecmd-gtk2 Les paramètres sont stockés dans le dossier `~/.config/doublecmd` ### Thunderbird Lancer thunderbird à l'ouverture de session xfce Paramètres → Session et démarrage → Démarrage automatique d'application ![](/images/thunderbird01a.png){:width="300"} Ajouter thunderbird aux favoris et lancer ### bashrc alias Dans le fichier ~/.bashrc alias ``` alias ls='ls --color=auto' alias ll='ls -lav --ignore=..' # show long listing of all except ".." alias l='ls -lav --ignore=.?*' # show long listing but no hidden dotfiles except "." alias aide='xdg-open https://static.rnmkcy.eu/aide-jekyll-text-theme.html#autres-styles' alias android='/home/yann/virtuel/KVM/bliss.sh' alias audio='yt-dlp --extract-audio --audio-format m4a --audio-quality 0 --output "~/Musique/%(title)s.%(ext)s"' alias audiomp3='yt-dlp --extract-audio --audio-format mp3 --audio-quality 0 --output "~/Musique/%(title)s.%(ext)s"' alias borglist='/home/yann/scripts/borglist.sh' alias calibreraz='adb -s CNBT80D20191101145 shell -x rm /sdcard/Document/metadata.calibre' alias certok='/home/yann/scripts/ssl-cert-check' alias compress='/home/yann/scripts/compress' alias dnsleak='/home/yann/scripts/dnsleaktest.py' alias findh='cat /home/yann/scripts/findhelp.txt' alias homer="ssh bookvm@192.168.0.225 -p 55215 -i /home/yann/.ssh/vm-debian12 '/home/bookvm/homer/remoh.py'" alias iceyanwg="sh /mnt/sharenfs/pc1/scripts/wgiceyan.sh" alias ipleak='curl https://ipv4.ipleak.net/json/' alias l='ls -lav --ignore=.?*' alias ll='ls -lav --ignore=..' alias ls='ls --color=auto' alias mediasync='/home/yann/scripts/sav-yann-media.sh' alias mediajour='/usr/bin/journalctl --no-pager -t sauvegardes --since today' alias nmapl='sudo nmap -T4 -sP 192.168.0.0/24' alias odt2html='/home/yann/scripts/_odt2html+index' alias odtprivate='/home/yann/scripts/_odt2html+index_private' alias orphelin='sudo pacman -Rsn $(pacman -Qdtq)' alias otp='/home/yann/scripts/generer-code-2fa-vers-presse-papier-toutes-les-30s.sh' alias ovh="ssh leno@192.168.0.215 -p 55215 -i /home/yann/.ssh/lenovo-ed25519 'cd /home/leno/ovh_api/; /home/leno/ovh_api/ApiOvh/bin/python domain.py xoyize.xyz cinay.eu xoyaz.xyz ouestline.xyz rnmkcy.eu yanfi.net icevps.xyz xoyize.net iceyan.xyz; cd /home/leno'" alias rename='/home/yann/scripts/remplacer-les-espaces-accents-dans-une-expression.sh' alias service='systemctl --type=service' alias sshm='/home/yann/scripts/ssh-manager.sh' alias ssl='/home/yann/scripts/ssl-cert-check' alias static='cd /home/yann/media/yannstatic; /home/yann/.rbenv/shims/bundle exec jekyll build -d /home/yann/media/yannstatic/static; cd ~' alias status='/home/yann/scripts/status.sh' alias synchro='journalctl --user -u media_yannstatic_site.service --no-pager --since today' alias toc='/home/yann/scripts/toc/toc.sh' alias tocplus='/home/yann/scripts/toc/tocplus.sh' alias tracesgpx="ssh bookvm@192.168.0.225 -p 55215 -i /home/yann/.ssh/vm-debian12 'tracesgpxnew /home/bookvm/media/osm-new/file'" alias traduc='/usr/local/bin/trans' alias vncasus='sh /home/yann/scripts/vncasus.sh' alias vncdell='sh /home/yann/scripts/vncdell.sh' alias vncmarina='sh /home/yann/scripts/vncmarina.sh' alias wgiceyan='sh /home/yann/scripts/wgiceyan.sh' alias x96='adb connect 192.168.0.22:5555' alias youtube='yt-dlp -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best" --output "~/Vidéos/%(title)s.%(ext)s" --ignore-errors' ``` nous rechargeons le fichier pour appliquer les modifications source ~/.bashrc ### Imprimante et scanner Prérequis , paquets **cups cups-filters cups-pdf system-config-printer hplip installés** (Pilotes HP pour DeskJet, OfficeJet, Photosmart, Business Inkjet et quelques modèles de LaserJet aussi bien qu'un certain nombre d'imprimantes Brother)... Installer graphiquement l'imprimante ![](/images/hp7510-00.png){:width="300"} ![](/images/hp7510-01.png) ![](/images/hp7510-02.png) ![](/images/hp7510-03.png){:width="300"} Pour contourner le problème , éditer le fichier `/etc/nsswitch.conf` Ajouter `mdns_minimal [NOTFOUND=return]` avant `resolve` `hosts: mymachines mdns_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] files myhostname dns` {:.warning} Après correctif ![](/images/hp7510-04.png){:width="300"} Avec cups : http://localhost:631/ ![](/images/hp_cups.png) Installation du scanner Coté logiciel il vous faudra **sane** et son interface graphique **xsane**, ainsi qu’éventuellement xsane-gimp le plugin pour gimp. yay -S xsane xsane-gimp Vérifier si le scaner est reconnu : `sudo scanimage -L` ``` device `escl:https://192.168.0.24:443' is a HP OfficeJet 7510 series [C22036] platen,adf scanner device `hpaio:/net/officejet_7510_series?ip=192.168.0.24&queue=false' is a Hewlett-Packard officejet_7510_series all-in-one ``` Test scan, placer un original pour photocopie scanimage --device hpaio:/net/officejet_7510_series?ip=192.168.0.24 --format=png > test.png ### Navigateur Floorp *Floorp est un navigateur basé sur Firefox qui bloque les traceurs malveillants, offre une mise en page flexible et personnalisable, et ne collecte pas les données des utilisateurs. Découvrez ses fonctionnalités, ses thèmes, ses mises à jour et son code source ouvert.* yay -S floorp-bin ### Application Mullvad * [Archlinux Mullvad](/2024/09/14/Mullvad-2024.html#archlinux-mullvad) * [Utilisation application VPN Mullvad](/htmldoc/Utilisation application VPN Mullvad.html) ### Générateur site statique *Ensemble d'applications basé sur ruby et jekyll qui permet la génération de site statique à partir de fichiers markdown* Installation sur archlinux sudo pacman -S ruby ruby-erb base-devel Pour ne pas installer les paquets RubyGems (appelés gems) en tant qu'utilisateur root. A la place, mettez en place un répertoire d'installation de gem pour votre compte utilisateur. Les commandes suivantes ajoutent des variables d'environnement à votre fichier ~/.bashrc pour configurer le chemin d'installation des gems ```bash echo '# Install Ruby Gems to ~/gems' >> ~/.bashrc echo 'export GEM_HOME="$HOME/gems"' >> ~/.bashrc echo 'export PATH="$HOME/gems/bin:$PATH"' >> ~/.bashrc source ~/.bashrc ``` Puis, installer Jekyll et Bundler gem install jekyll bundler Les versions installées ![](/images/version-ruby-jekyll.png) Suite installation --> [yannstatic - générateur site statique](/2024/07/13/Archlinux_Ruby_Jekyll_site_statique.html#yannstatic) ### Ntfy *Ntfy, qui se prononce “notify”, est un service de notification ultra léger, permettant d’envoyer des messages vers un smartphone ou un ordinateur via de simples scripts, sans besoin de compte et totalement gratuitement !* [Ntfy service de notification](/2024/02/22/Ntfy.html) yay -S ntfy-bin ### FreeTuxTv *FreetuxTV est une application qui permet de regarder et enregistrer facilement les chaînes de télévision sous GNU/Linux et les chaînes de télévision de votre fournisseur d'accès internet.* En mode su echo "192.168.0.254 mafreebox.freebox.fr" >> /etc/hosts Installation sudo pacman -S freetuxtv Paramétrage du parefeu firewalld ([Configuration de firewalld pour le multicast VLC freebox](https://forums.fedora-fr.org/d/59161-configuration-de-firewalld-pour-le-multicast-vlc-freebox-de-chez-free)) Créer les services **/etc/firewalld/services//mafreebox.xml** et **/etc/firewalld/services//vlc.xml** pour firewalld **mafreebox.xml** ```xml mafreebox Permission pour mafreebox et vlc ``` **vlc.xml** ```xml vlc2 Permission pour mafreebox et vlc ``` Les ajouter à la **zone public** pour rendre ces règles permanentes /etc/firewalld/zones/public.xml ```xml Public For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted. ``` Recharger le parefeu firewall-cmd --reload ## Virtuel QEMU KVM VMM ### Installation Virt-Manager 1. [Virt-Manager Complete Edition - Installation simplifiée](/2023/05/31/EndeavourOS-Virt-Manager_Complete_Edition.html#installation-simplifiée) 2. [Accés aux machines virtuelles KVM distantes via virt-manager](/2023/12/17/Installer_KVM_Kernel_Virtual_Machine_sur_un_serveur.html#accés-aux-machines-virtuelles-kvm-distantes-via-virt-manager) 3. [Pont réseau virtuel “host-bridge”](/2023/05/31/EndeavourOS-Virt-Manager_Complete_Edition.html#pont-réseau-virtuel-host-bridge) ![](/images/host-bridge-br0.png){:width="400"} 4. Gestionnaire de machine virtuelles, activer "xml editing" ![](/images/xml-editing.png){:width="400"} 5. Restaurer les configurations de VM `sudo cp ~/virtuel/etc-libvirt-qemu/*.xml /etc/libvirt/qemu/` **Déclarer le pont (bridge) à KVM** Créer un fichier de définition de réseau au format XML : `nano router-tenda.xml` ```xml router-tenda ``` Appliquer la configuration : ```bash sudo virsh net-define router-tenda.xml # -> Réseau host-tenda défini depuis router-tenda.xml sudo virsh net-start router-tenda # -> Réseau router-tenda démarré sudo virsh net-autostart router-tenda # -> Réseau router-tenda marqué en démarrage automatique ``` Vérification sudo virsh net-list --all ``` Nom État Démarrage automatique Persistant ------------------------------------------------------------- router-tenda actif oui oui ``` La structure libvirt ``` # Les configurations xml [root@pc1 yann]# tree -L 2 /etc/libvirt/qemu /etc/libvirt/qemu ├── autostart │   └── vm-debian12.xml -> /etc/libvirt/qemu/vm-debian12.xml ├── EndeavourOS.xml ├── networks │   ├── autostart │   ├── default.xml │   └── router-tenda.xml └── win11.xml # les images sous KVM [yann@pc1 ~]$ tree -L 2 ~/virtuel/ /home/yann/virtuel/ ├── eos │   └── eos-chiffre_luks_backup.bin ├── KVM │   ├── eos-lvm-luks-1.qcow2 │   └── wineleven.qcow2 ├── KVM_SAV │   ├── etc-libvirt-qemu │   └── images_qcow2 └── nspawn └── nspbullseye ``` ## Développement ### Wing personal python IDE **Wing personal python IDE** → [Téléchargement](https://wingware.com/downloads/wing-personal) ``` # Décompression de la version téléchargée tar xjvf wing-personal-10.0.6.0-linux-x64.tar.bz2 # Passage en root sudo -s # Lancement procédure installation cd wing-personal-10.0.6.0-linux-x64 ./wing-install.py ``` Déroulement de la commande ``` Where do you want to install the support files for Wing Personal (default = /usr/local/lib/wing-personal9)? /usr/local/lib/wing-personal9 does not exist, create it (y/N)? y Where do you want to install links to the Wing Personal startup scripts (default = /usr/local/bin)? [...] Writing file-list.txt Icon/menu install returned err=0 Done installing. Make sure that /usr/local/bin is in your path and type "wing-personal9" to start Wing Personal. ``` Effacer les fichiers ``` # Suppression dossier et fichier cd .. rm -rf wing-personal* # sortie root exit ``` ### Go et NodeJS Archlinux Go yay -S go go version *go version go1.23.2 linux/amd64* Archlinux Node.js npm yay -S nodejs npm node --version && npm --version *v22.9.0* *10.8.3* NVM, également appelé « Node Version Manager », est un outil utilisé pour installer et gérer plusieurs versions de Node.js sur le système. Installer la dernière version de NVM à l'aide de la commande suivante curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash source ~/.bashrc Vérifier nvm --version *0.39.2* **Installer Node.js avec NVM** Pour lister toutes les versions disponibles Node.js nvm list-remote Vous obtiendrez une liste de toutes les versions ``` v20.17.0 (LTS: Iron) v20.18.0 (Latest LTS: Iron) v22.2.0 v22.3.0 v22.4.0 v22.4.1 v22.5.0 v22.5.1 v22.6.0 v22.7.0 v22.8.0 v22.9.0 ``` Pour installer la dernière version de Node.js `nvm install node` Pour installer la dernière version stable de Node.js `nvm install --lts` Pour installer une version spécifique de Node.js `nvm install 18.10.0` Pour lister toutes les versions installées de Node.js `nvm ls` Pour modifier la version Node.js par défaut à 19.0.0 `nvm utilisation 19.0.0` ### Dbeaver *DBeaver est basé sur le framework Eclipse, il est open source et il supporte plusieurs types de serveurs de bases de données comme : MySQL, SQLite, DB2, PostgreSQL, Oracle...* Version java si installé : `java --version` ``` openjdk 22.0.2 2024-07-16 OpenJDK Runtime Environment (build 22.0.2+9) OpenJDK 64-Bit Server VM (build 22.0.2+9, mixed mode, sharing) ``` Installation yay -S dbeaver ``` Sync Explicit (1): dbeaver-24.2.1-1 résolution des dépendances… :: Il y a 6 fournisseurs disponibles pour java-runtime>=17 : :: Dépôt extra 1) jdk-openjdk 2) jdk17-openjdk 3) jdk21-openjdk 4) jre-openjdk 5) jre17-openjdk 6) jre21-openjdk Entrer un nombre (par défaut, 1 est sélectionné): 4 recherche des conflits entre paquets… :: jre-openjdk - 22.0.2.u9-1 et jre-openjdk-headless - 22.0.2.u9-1 sont en conflit. Supprimer jre-openjdk-headless ? [o/N] o ``` ### MariaDB [MariaDB archlinux](/2019/02/09/MariaDB-sur-Debian-Stretch.html#archlinux) Résumé des commandes en mode su ```shell pacman -S mariadb mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql systemctl enable mariadb --now systemctl status --no-pager --full mariadb --full ``` Sécuriser sudo mysql_secure_installation ### PostgreSQL [PostgreSQL](/2024/11/08/PostgreSQL.html) Création d'un bash nommé `articles_remarquables_ttrss` pour exécuter les opérations suivantes: * Connexion ssh à la machine virtuelle Alpine Linux et exécution d-un dump de la base de données * La commande dump : `sudo docker exec -i aluser-db-1 /bin/bash -c "PGPASSWORD=Mot_Passe_Base pg_dump --username postgres postgres" > dump_ttrss.sql` * Note: La commande est dans un fichier nommé `import_base.sh` * Importer localement la base au format SQL * Recréer la base PostgreSQL (PostgreSQL installé sur la machine où s'exécute le bash) * Exécuter une requête qui génére un fichier markdown qui sera automatiquement intégré dans le site statique Le bash `articles_remarquables_ttrss` ```bash #!/bin/bash set -euo pipefail trap 'echo "Une erreur est survenue."; exit 1' ERR # Connexion SSH VM Alpine ttrss, récupération base postgresql ttrss sous forme de fichier SQL ssh -p 55217 -i /home/yann/.ssh/ttrss_alpine-vm aluser@192.168.0.217 'sh import_base.sh' scp -P 55217 -i /home/yann/.ssh/ttrss_alpine-vm aluser@192.168.0.217:/home/aluser/dump_ttrss.sql /home/yann/media/devel/psql/ # Localement, supprimer et recréer base vide postgresql ttrss psql -U postgres -c "DROP DATABASE ttrss" psql -U postgres -c "CREATE DATABASE ttrss" # Import fichier SQL dans la base psql -U postgres ttrss < /srv/media/devel/psql/dump_ttrss.sql # Générer le fichier markdown psql ttrss -U postgres -c "\COPY ( select concat('
  • ', ttrss_entries.title || ' (' ,ttrss_feeds.title || ')
  • ' ) from ttrss_entries join ttrss_user_entries on ttrss_entries.id = ttrss_user_entries.int_id join ttrss_feeds on ttrss_feeds.id = ttrss_user_entries.feed_id where ttrss_user_entries.marked = true order by ttrss_entries.updated DESC) TO '/srv/media/devel/psql/ttrss.md'" # Créer le fichier liens_ttrss.md dans le dossier yannstatic # cat /srv/media/devel/psql/Entete_liens_ttrss.txt /srv/media/devel/psql/ttrss.md /srv/media/devel/psql/Pied_liens_ttrss.txt > /srv/media/yannstatic/liens_ttrss.md LIENS_TTRSS="/srv/media/yannstatic/liens_ttrss.md" cat << EOF > $LIENS_TTRSS --- layout: article titles: Liens ttrss au format HTML --- Doc Html
      EOF cat /srv/media/devel/psql/ttrss.md >> $LIENS_TTRSS cat << EOF >> $LIENS_TTRSS
    EOF ``` ## Maintenance ### Sauvegardes locales [Sauvegardes locales avec systemd utilisateur service et timer](/2021/05/28/Sauvegardes_locales_avec_systemd_utilisateur_service_et_timer.html) La sauvegarde démarre 3 minutes après la mise sous tension de PC1 Les logs : `journalctl --user -u savyann.service` Liste des timers : `systemctl --user list-timers --all` ### Pacman Hooks * [Pacman hooks for setting up certain system identification files of EndeavourOS (eos-hooks)](https://github.com/endeavouros-team/PKGBUILDS/tree/master/eos-hooks) * [Pacman hooks](https://github.com/Strykar/pacman-hooks) **Liste paquets installés** *Ce hook sauvegardera une liste de vos paquets natifs et étrangers (AUR) installés. Cela garantit que vous aurez toujours une liste à jour de tous vos paquets que vous pourrez réinstaller.* Prérequis pour la création du hook et des scripts, créez des sous-répertoires sudo mkdir -p /etc/pacman.d/{hooks,hooks.bin} Créez le hook sudo nano /etc/pacman.d/hooks/50-pacman-list.hook ``` #/etc/pacman.d/hooks/50-pacman-list.hook [Trigger] Type = Package Operation = Install Operation = Upgrade Operation = Remove Target = * [Action] Description = Création liste des paquets installés When = PostTransaction Exec = /bin/sh -c '/usr/bin/pacman -Qqe > /mnt/sharenfs/pc1/PC1_eos_pkg_list.txt' ``` Pour installer des paquets depuis une sauvegarde antérieure de la liste des paquets, tout en ne réinstallant pas ceux qui sont déjà installés et à jour, lancer: sudo pacman -S --needed - < PC1_eos_pkg_list.txt sudo pacman -S --needed $(comm -12 <(pacman -Slq | sort) <(sort pkglist.txt)) ### Changer Nvme ou SSD chiffré Remplacer M.2 2280 NVMe 1To par une 2To ![](/images/ssd_Fikwot_FN501_Pro.png) Boot sur usb live EndeavourOS Passer en mode su Les partitions du disque chiffré nvme0n1 ``` nvme0n1 259:0 0 931.5G 0 disk ├─nvme0n1p1 259:1 0 512M 0 part ├─nvme0n1p2 259:2 0 920G 0 part │ └─crypttemp 254:3 0 920G 0 crypt │ ├─vg0-lvroot 254:4 0 70G 0 lvm │ ├─vg0-lvhome 254:5 0 120G 0 lvm │ └─vg0-lvmedia 254:6 0 600G 0 lvm └─nvme0n1p3 259:3 0 11G 0 part ``` Déchiffrer la partition nvme0n1p2 cryptsetup luksOpen /dev/nvme0n1p2 crypttemp Créer et monter le système à sauvegarder sur /media ```shell mkdir -p /media mkdir -p /media/home mkdir -p /media/efi mount /dev/vg0/lvroot /media mount /dev/vg0/lvhome /media/home mount /dev/nvme0n1p1 /media/efi ``` Monter le système qui va recevoir la sauvegarde ```shell mount /dev/vg-nas-one/sav /mnt mkdir -p /mnt/pc1 mkdir -p /mnt/pc1/efi mkdir -p /mnt/pc1/home ``` Sauvegarder le système actuel (racine,home et efi) rsync -avA /media/ /mnt/pc1 Patienter plusieurs minutes, suivant la taille Arrêter la machine PC1 Remplacer la carte SSD M2 Redémarrer la machine sur un USB Live EndeavourOS Zapper le nouveau disque SSD M.2 sgdisk --zap-all /dev/nvme0n1 Partitionnement du disque NVME 2To GPT + LVM gdisk /dev/nvme0n1 Créer 2 partitions Partition 1 : 512M EFI (code ef00) système de fichier FAT32 Partition 2 : le reste LVM (code 8e00) système de fichier EXT4 Formater partition EFI mkfs.fat -F32 /dev/nvme0n1p1 Chiffrer la partition /dev/nvme0n1p2 cryptsetup luksFormat --type luks2 /dev/nvme0n1p2 Ouvrir la partition chiffrée cryptsetup luksOpen /dev/nvme0n1p2 crypt Créer LVM pvcreate /dev/mapper/crypt vgcreate vg0 /dev/mapper/crypt Créer les volumes ```shell lvcreate -L 60G vg0 -n lvroot # Logical volume "lvroot" created. lvcreate -L 120G vg0 -n lvhome # Logical volume "lvhome" created. ``` Système de fichier ```shell mkfs.ext4 -L root /dev/mapper/vg0-lvroot mkfs.ext4 -L home /dev/mapper/vg0-lvhome ``` Monter le nouveau système sur /mnt ```shell mount /dev/mapper/vg0-lvroot /mnt mkdir -p /mnt/home mount /dev/mapper/vg0-lvhome /mnt/home mkdir -p /mnt/efi mount /dev/nvme0n1p1 /mnt/efi ``` Monter la sauvegarde sur media mount /dev/vg-nas-one/sav /media Restaurer le système rsync -avA /media/pc1/ /mnt Patienter plusieurs minutes, suivant la taille Création volume logique LVM media et montage ```shell lvcreate -L 800G vg0 -n lvmedia mkfs.ext4 -L media /dev/mapper/vg0-lvmedia mkdir -p /mnt/srv/media mount /dev/vg0/lvmedia /mnt/srv/media ``` Restaurer la sauvegarde multimedia rsync -avA /media/pc1_20240201/media/srv/media/ /mnt/srv/media Démonter le système de sauvegarde umount /media Ajouter un fichier de clé existant LUKS cryptsetup luksAddKey /dev/nvme0n1p2 /mnt/crypto_keyfile.bin Il faut saisir le phrase mot de passe Configuration /etc/crypttab cryptsetup luksUUID /dev/nvme0n1p2 Renvoie UUID ae37e59d-35f7-4920-8428-be8be8d15243 Modifier /mnt/etc/crypttab Contenu ``` # cryptlvm UUID=ae37e59d-35f7-4920-8428-be8be8d15243 /crypto_keyfile.bin luks ``` Passer en chroot arch-chroot /mnt Relever les UUID blkid -s UUID -o value /dev/mapper/vg0-lvroot renvoie l’UUID du volume racine : 2a6cab35-6c52-4382-9aee-06a376a8acc0 blkid -s UUID -o value /dev/mapper/vg0-lvhome renvoie l’UUID du volume d’accueil : b4e52069-a8c9-459e-b39f-6ac1b682b0d6 blkid -s UUID -o value /dev/mapper/vg0-lvmedia renvoie l’UUID du volume media : 1ca4bfc7-3d31-4859-aeb3-656214fab490 blkid -s UUID -o value /dev/nvme0n1p1 renvoie l’UUID du volume media : E5E4-A4AE Configurer /etc/fstab nano /etc/fstab ``` UUID=E5E4-A4AE /efi vfat defaults,noatime 0 2 tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0 UUID=2a6cab35-6c52-4382-9aee-06a376a8acc0 / ext4 defaults,acl,noatime,discard 0 0 UUID=b4e52069-a8c9-459e-b39f-6ac1b682b0d6 /home ext4 defaults,acl,noatime,discard 0 0 /swapfile none swap defaults,pri=-2 0 0 # /dev/mapper/vg0-lvmedia UUID=86a7c58c-8f30-42e2-bd39-d1ae7464c837 /srv/media ext4 rw,relatime 0 2 # /dev/mapper/ssd--512-virtuel UUID=84bc1aa9-23ac-4530-b861-bc33171b7b42 /virtuel ext4 defaults 0 2 # /dev/mapper/vg--nas--one-sav UUID=c5b9eefc-1daa-4a0d-8a72-6169b3c8c91f /sauvegardes ext4 defaults 0 2 # /dev/vg-nas-one/iso - Volume logique 200G du disque 4To UUID=58f4b6c7-3811-41d5-9964-f47ac32375f6 /iso ext4 defaults 0 2 ``` options du noyau ```shell blkid -s UUID -o value /dev/nvme0n1p2 # --> ae37e59d-35f7-4920-8428-be8be8d15243 ``` Modifier /etc/kernel/cmdline nano /etc/kernel/cmdline ``` nvme_load=YES nowatchdog rw rd.luks.uuid=ae37e59d-35f7-4920-8428-be8be8d15243 root=/dev/mapper/vg0-lvroot ``` Réinstaller noyau reinstall-kernels Sortie du chroot , retirer la clé USB Live et reboot de la machine ### Mise à jour , si erreur de paquet ou signature PGP En cas d'erreur de paquet ou signature PGP sudo pacman -S endeavouros-keyring archlinux-keyring `Redémarrer la machine`{:.info} ### Etat des lieux Ajouter un alias dans le fichier `~/.bashrc` alias etat='$HOME/scripts/etat_des_lieux.sh' Recharger et exécuter source ~/.bashrc etat ### Ajout disque LVM Exemple disque SSD 120Go Disque sda lsblk ``` NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 111,8G 0 disk ``` **gdisk** sudo gdisk /dev/sda o : nouvelle partion dos n : nouvelle partition typt LVM 8e00 Format fichier ext4 sudo mkfs.ext4 /dev/sda1 **LVM** (Logical Volume Manager, ou gestionnaire de volumes logiques en français) permet la création et la gestion de volumes logiques sous Linux. L'utilisation de volumes logiques remplace en quelque sorte le partitionnement des disques. Volume physique : `sudo pvcreate /dev/sda1` GroupevVolumes : `sudo vgcreate ssd-120 /dev/sda1` Volume logique : `sudo lvcreate -n lv120 -l +100%FREE ssd-120` Fichier ext4 : `sudo mkfs.ext4 /dev/ssd-120/lv120` Relever UUID `sudo blkid |grep lv120` ``` /dev/mapper/ssd--120-lv120: UUID="6b48e98c-9b85-461b-9371-040765aae682" BLOCK_SIZE="4096" TYPE="ext4" ``` Création point de montage sudo mkdir -p /mnt/ssd Ajouter les lignes suivantes au fichier **/etc/fstab** ``` # /dev/mapper/ssd--120-lv120 UUID=6b48e98c-9b85-461b-9371-040765aae682 /mnt/ssd ext4 defaults 0 2 ``` Rechargement et montage sudo systemctl daemon-reload sudo mount -a Vérification : `df -h /mnt/ssd/` ``` Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur /dev/mapper/ssd--120-lv120 110G 2,1M 104G 1% /mnt/ssd ``` Droits en écriture à l'utilisateur sudo chown $USER:$USER /mnt/ssd/ ### Synchro serveurs **Dossier "BiblioCalibre"** Le but est de synchroniser le dossier **/srv/media/BiblioCalibre** avec le(s) serveur(s) web distant(s) Avec les unités de chemin, vous pouvez surveiller les fichiers et les répertoires pour certains événements. Si un événement spécifique se produit, une unité de service est exécutée, et elle porte généralement le même nom que l'unité de chemin {:.info} Nous allons surveiller dans le dossier */srv/media/BiblioCalibre/* toute modification du fichier **metadata.db** qui entrainera l'exécution d'un script Dans le répertoire systemd utilisateur nous créons une unité de cheminement **media_BiblioCalibre_site.path** nano ~/.config/systemd/user/media_BiblioCalibre_site.path ```ini [Unit] Description=Surveiller metadata.db pour les changements [Path] PathChanged=/srv/media/BiblioCalibre/metadata.db Unit=media_BiblioCalibre_site.service [Install] WantedBy=default.target ``` Dans la section `[Path]`, `PathChanged=` indique le chemin absolu du fichier à surveiller, tandis que `Unit=` indique l'unité de service à exécuter si le fichier change. Cette unité (**media_BiblioCalibre_site.path**) doit être lancée lorsque le système est en mode multi-utilisateur. Ensuite, nous créons l'unité de service correspondante, **media_BiblioCalibre_site.service**, dans le répertoire `~/.config/systemd/user/` Si le fichier **metadata.db** change (c'est-à-dire qu'il est à la fois écrit et fermé), l'unité de service suivante sera appelée pour exécuter le script spécifié : nano ~/.config/systemd/user/media_BiblioCalibre_site.service ```ini [Unit] Description="Exécute le script si metadata.db a été modifié." [Service] ExecStart=/mnt/sharenfs/scripts/media_BiblioCalibre_site.sh [Install] WantedBy=default.target ``` Le script `media_BiblioCalibre_site.sh` lance une synchronisation locale distante via rsync ssh
    Etendre Réduire media_BiblioCalibre_site.sh {% highlight bash %} #!/bin/bash #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Modification mode rsync suivant serveur distant # # Chaque modification du fichier metadata.db dans le dossier local /srv/media/BiblioCalibre # déclenche une synchronisation du dossier local avec le dossier distant '/sharenfs/multimedia/eBook/BiblioCalibre' # des serveurs VPS Yunohost # le dossier local est également sauvegardé dans le dossier 'backup/datayan/static' de la boîte de stockage #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Fonction pour tester si le serveur est présent # Host=$1 et Port=$2 # Réponse $?=0 -> OK $?=1 -> NOK host_ok () { nc -4 -d -z -w 1 $1 $2 &> /dev/null } synchro () { # Synchronisation locale distante du dossier _site host_ok $SERVER $PORT if [[ $? == 0 ]] then echo 'rsync -avz --progress --stats --human-readable --delete -e "ssh -p '$PORT' -i '$PRIVKEY'" '$REPLOC' '$USERDIS':'$REPDIS'/eBook/' rsync -avz --progress --stats --human-readable --delete --rsync-path="$RSYNCMOD" -e "ssh -p $PORT -i $PRIVKEY" $REPLOC $USERDIS:$REPDIS/eBook/ > /dev/null # Analyse résultat de la commande rsync if [ ! $? -eq 0 ]; then #echo "Synchro $REPLOC avec $SERVER -> OK" | systemd-cat -t BiblioCalibre -p info #echo "Synchro $REPLOC avec $SERVER -> OK" #else echo "Synchro $REPLOC avec $SERVER -> ERREUR" | systemd-cat -t BiblioCalibre -p emerg #echo "Synchro $REPLOC avec $SERVER -> ERREUR" fi else echo "Site $SERVER port $PORT Inaccessible !" | systemd-cat -t BiblioCalibre -p emerg #echo "Site $SERVER port $PORT Inaccessible !" fi } #******************************************************************* # # DEPART SCRIPT # #******************************************************************* # Tester la présence du fichier des serveurs distants if [ ! -f /home/yann/scripts/serveurs.csv ]; then echo "Fichier serveurs.csv inexistant!" | systemd-cat -t BiblioCalibre -p emerg exit 1 fi # Mesure temps exécution begin=$(date +"%s") echo "***DEPART*** Exécution script $0" echo "***DEPART*** Exécution script $0" | systemd-cat -t BiblioCalibre -p info #echo "Exécution script $0" # Dossier local REPLOC="/srv/media/BiblioCalibre" # Synchro serveurs while IFS="," read -r SERVER REPDIS USERDIS PORT PRIVKEY RSYNCMOD LOCAL do #echo " $SERVER $REPDIS $USERDIS $PORT $PRIVKEY $RSYNCMOD $LOCAL" if [[ "$SERVER" = "rnmkcy.eu" ]]; then synchro echo "ssh $USERDIS -p $PORT -i $PRIVKEY 'sudo systemctl restart calibreweb'" ssh $USERDIS -p $PORT -i $PRIVKEY 'sudo systemctl restart calibreweb' fi done < <(tail -n +2 /home/yann/scripts/serveurs.csv) # Calcul et affichage temps exécution termin=$(date +"%s") difftimelps=$(($termin-$begin)) echo "***FIN*** $0 exécuté en $(($difftimelps / 60)) mn $(($difftimelps % 60)) s" | systemd-cat -t BiblioCalibre -p info echo "***FIN*** $0 exécuté en $(($difftimelps / 60)) mn $(($difftimelps % 60)) s" exit 0 {% endhighlight %}
    Activer et lancer systemctl --user enable media_BiblioCalibre_site.path --now Voir le fichier journal journalctl --user -f -u media_BiblioCalibre_site.service ``` juin 06 09:39:32 yann-pc1 systemd[1537]: Started "Exécute le script si metadata.db a été modifié.". juin 06 09:39:32 yann-pc1 media_BiblioCalibre_site.sh[11100]: ***DEPART*** Exécution script /home/yann/scripts/media_BiblioCalibre_site.sh juin 06 09:39:32 yann-pc1 media_BiblioCalibre_site.sh[11100]: rsync -avz --progress --stats --human-readable --delete -e "ssh -p 55215 -i /home/yann/.ssh/lenovo-ed25519" /srv/media/BiblioCalibre leno@192.168.0.215:/sharenfs/multimedia/Divers/ juin 06 09:39:33 yann-pc1 media_BiblioCalibre_site.sh[11100]: ***FIN*** /home/yann/scripts/media_BiblioCalibre_site.sh exécuté en 0 mn 1 s juin 06 09:44:40 yann-pc1 systemd[1537]: Started "Exécute le script si metadata.db a été modifié.". juin 06 09:44:40 yann-pc1 media_BiblioCalibre_site.sh[11278]: ***DEPART*** Exécution script /home/yann/scripts/media_BiblioCalibre_site.sh juin 06 09:44:40 yann-pc1 media_BiblioCalibre_site.sh[11278]: rsync -avz --progress --stats --human-readable --delete -e "ssh -p 55215 -i /home/yann/.ssh/lenovo-ed25519" /srv/media/BiblioCalibre leno@192.168.0.215:/sharenfs/multimedia/Divers/ juin 06 09:44:41 yann-pc1 media_BiblioCalibre_site.sh[11278]: ssh leno@192.168.0.215 -p 55215 -i /home/yann/.ssh/lenovo-ed25519 'sudo systemctl restart calibreweb' juin 06 09:44:42 yann-pc1 media_BiblioCalibre_site.sh[11278]: ***FIN*** /home/yann/scripts/media_BiblioCalibre_site.sh exécuté en 0 mn 2 s ``` On peut créer un accès graphique sur le poste archlinux ~/.local/share/applications/suivi_BiblioCalibre_site.desktop ``` [Desktop Entry] Version=1.1 Type=Application Name=Synchro BiblioCalibre Comment=synchro site rnmkcy.eu Icon=xterm-color_48x48 Exec=xterm -rv -geometry 250x30+10+50 -T suivi_BiblioCalibre_site -e 'journalctl --user -u media_BiblioCalibre_site.service --no-pager; read -p "Touche Entrée pour sortir..."' Actions= Categories=Utility; Path= Terminal=false StartupNotify=false ```]]>
    Moteur de routage (BRouter) + Visualisation et édition traces gpx (gpx.studio)2024-10-01T00:00:00+02:002024-10-01T00:00:00+02:00https://static.rnmkcy.eu/2024/10/01/Visualisation_et_edition_des_traces_gpx_studio* ## BRouter ![](/images/routing-map-logo.png) *BRouter est un moteur de routage conçu pour calculer des itinéraires optimaux en utilisant OpenStreetMap et des données d'élévation. Comme alternative à la [version en ligne](https://brouter.de/brouter-web/), le serveur autonome de BRouter peut également être exécuté localement ().* ### Prérequis Installer java sudo apt install default-jre Version : `java --version` ``` openjdk 17.0.12 2024-07-16 OpenJDK Runtime Environment (build 17.0.12+7-Debian-2deb12u1) OpenJDK 64-Bit Server VM (build 17.0.12+7-Debian-2deb12u1, mixed mode, sharing) ``` ### Procédure installation Télécharger et décompresser la dernière archive autonome (`brouter-web-standalone..zip`) à partir de , par exemple pour Linux (remplacez `~/opt/` par votre répertoire d'installation préféré et `0.11.0` par la dernière version) : ```bash sudo mkdir -p /opt/brouter sudo chown $USER:$USER /opt/brouter cd /opt/brouter wget https://github.com/nrenner/brouter-web/releases/download/0.18.1/brouter-web-standalone.0.18.1.zip unzip brouter-web-standalone.0.18.1.zip rm brouter-web-standalone.0.18.1.zip ``` ### Données rd5 Télécharger un ou plusieurs fichiers de données rd5 depuis le [download directory](https://brouter.de/brouter/segments4/) ou le [grid map](https://umap.openstreetmap.de/de/map/brouter-rd5-grid_9438) dans le répertoire `/opt/segments4`. ![](/images/brouter01.png) ``` wget -P /opt/brouter/segments4 https://brouter.de/brouter/segments4/W5_N45.rd5 wget -P /opt/brouter/segments4 https://brouter.de/brouter/segments4/E0_N50.rd5 wget -P /opt/brouter/segments4 https://brouter.de/brouter/segments4/E0_N45.rd5 wget -P /opt/brouter/segments4 https://brouter.de/brouter/segments4/E5_N45.rd5 wget -P /opt/brouter/segments4 https://brouter.de/brouter/segments4/E5_N40.rd5 wget -P /opt/brouter/segments4 https://brouter.de/brouter/segments4/E0_N40.rd5 wget -P /opt/brouter/segments4 https://brouter.de/brouter/segments4/W5_N40.rd5 ``` Veuillez patienter quelques minutes... ### Le script de lancement Création d'un script `/opt/brouter/srv.sh` , Port d'écoute 11955 ```bash #!/bin/sh BINDADDRESS="localhost" # BRouter standalone server # java -cp brouter.jar btools.brouter.RouteServer [bindaddress] # maxRunningTime is the request timeout in seconds, set to 0 to disable timeout JAVA_OPTS="-Xmx128M -Xms128M -Xmn8M -DmaxRunningTime=300" # If paths are unset, first search in locations matching the directory structure # as found in the official BRouter zip archive CLASSPATH=${CLASSPATH:-"/opt/brouter/brouter.jar"} SEGMENTSPATH=${SEGMENTSPATH:-"/opt/brouter/segments4"} PROFILESPATH=${PROFILESPATH:-"/opt/brouter/profiles2"} CUSTOMPROFILESPATH=${CUSTOMPROFILESPATH:-"/opt/brouter/customprofiles"} java $JAVA_OPTS -cp $CLASSPATH btools.server.RouteServer "$SEGMENTSPATH" "$PROFILESPATH" "$CUSTOMPROFILESPATH" 11955 1 $BINDADDRESS ``` Le rendre exécutable chmod +x /opt/brouter/srv.sh ### Systemd service brouter Créer un service brouter sudo nano /etc/systemd/system/brouter.service ``` [Unit] Description=brouter server [Service] Type=exec User=leno WorkingDirectory=/opt/brouter ExecStart=sh /opt/brouter/srv.sh [Install] WantedBy=multi-user.target ``` Recharger , activer et lancer le service **brouter** ```bash sudo systemctl daemon-reload sudo systemctl enable brouter --now ``` Vérifier : `systemctl status brouter` ``` ● brouter.service - brouter server Loaded: loaded (/etc/systemd/system/brouter.service; enabled; preset: enabled) Active: active (running) since Wed 2024-10-02 13:40:18 CEST; 32s ago Main PID: 283776 (sh) Tasks: 20 (limit: 14161) Memory: 28.5M CPU: 247ms CGroup: /system.slice/brouter.service ├─283776 sh /opt/brouter/srv.sh └─283778 java -Xmx128M -Xms128M -Xmn8M -DmaxRunningTime=300 -cp /opt/brouter/brouter.jar btools.server.RouteServer /opt/brouter/segments4 /opt/brouter/profiles2 /opt/brouter/customprofiles 11955 1 localhost oct. 02 13:40:18 rnmkcy.eu systemd[1]: Starting brouter.service - brouter server... oct. 02 13:40:18 rnmkcy.eu systemd[1]: Started brouter.service - brouter server. oct. 02 13:40:18 rnmkcy.eu sh[283778]: BRouter 1.6.3 / 21122021 ``` ### Proxy nginx Proxy nginx **brouter** `/etc/nginx/conf.d/routeur.rnmkcy.eu.conf` ```nginx server { # ipv4 listening port/protocol listen 443 ssl http2; # ipv6 listening port/protocol listen [::]:443 ssl http2; server_name routeur.rnmkcy.eu; include /etc/nginx/conf.d/security.conf.inc; location / { proxy_pass http://127.0.0.1:11955 ; } } ``` Vérification et rechargement nginx ```bash sudo nginx -t sudo systemctl reload nginx ``` ## gpx.studio ![](/images/gpxstudio-logo.png){:width="200"} Cloner dans /sharenfs/rnmkcy/ cd /sharenfs/rnmkcy/ git clone https://github.com/gpxstudio/gpx.studio.git Le code est divisé en deux parties: - `gpx`: une bibliothèque de typescript pour parser et manipuler des fichiers GPX, - `site web`: le site lui-même, qui est une application [SvelteKit](https://kit.svelte.dev/). Vous aurez besoin de [Node.js](https://nodejs.org/) pour construire et exécuter ces deux parties. ### Construction bibliothèque gpx **Construction bibliothèque gpx** ```bash cd gpx.studio/gpx npm install npm run build ``` Pour pouvoir charger la carte, vous devrez créer votre propre Mapbox access token et le stocker dans un fichier `.env` dans le répertoire `website`. ``` cd ../website echo "PUBLIC_MAPBOX_TOKEN={YOUR_MAPBOX_TOKEN}" >> .env npm install ``` ### Mode production **Les modifications des sources "website" avant construction** Dossier `/sharenfs/rnmkcy/gpx.studio/website/src` Avant toute modification de la zone "website/src", effectuer une sauvegarde des sources ```bash mkdir $HOME/FreeUSB2To/rnmkcy.eu/sauvegardes/gpx_website_src rsync -av /sharenfs/rnmkcy/gpx.studio/website/src $HOME/FreeUSB2To/rnmkcy.eu/sauvegardes/gpx_website_src ``` Les pages par défaut en fr ```bash find /sharenfs/rnmkcy/gpx.studio/website/src/ -name "*" -type f -exec sed -i "s#'en'#'fr'#g" {} \; ``` Remplacer **gpx.studio** par **gpx.rnmkcy.eu** ```bash find /sharenfs/rnmkcy/gpx.studio/website/src/ -name "*" -type f -exec sed -i "s#gpx.studio#gpx.rnmkcy.eu#g" {} \; ``` Modifier Export.svelte ```
    ``` Menu.svelte , supprimer button ``` ``` **Utilisation avec BRouter** Il faut modifier l'adresse de routing ligne 50 fichier `Routing.ts` `let url = `https://routing.gpx.studio?lonlats=$.......` Remplacer "https://routing.gpx.studio" par "https://routeur.rnmkcy.eu" Fichier: `/sharenfs/rnmkcy/gpx.studio/website/src/lib/components/toolbar/tools/routing/Routing.ts` ``` # fichier /sharenfs/rnmkcy/gpx.studio/website/src/lib/components/toolbar/tools/routing/Routing.ts # ligne 11 export const brouterProfiles: { [key: string]: string } = { bike: 'trekking', racing_bike: 'fastbike', foot: 'hiking-beta', water: 'river', railway: 'rail' }; #ligne 47 let url = `https://routeur.rnmkcy.eu?lonlats=${points.map(point => `${point.lon.toFixed(8)},${point.lat.toFixed(8)}`).join('|')}&profile=${brouterProfile + (privateRoads ? '-private' : '')}&format=geojson&alternativeidx=0`; # On supprime '-private' let url = `https://routeur.rnmkcy.eu?lonlats=${points.map(point => `${point.lon.toFixed(8)},${point.lat.toFixed(8)}`).join('|')}&profile=${brouterProfile + (privateRoads ? '' : '')}&format=geojson&alternativeidx=0`; ``` **Construire le site** ```bash cd /sharenfs/rnmkcy/gpx.studio/website echo "PUBLIC_MAPBOX_TOKEN={YOUR_MAPBOX_TOKEN}" >> .env npm install export NODE_OPTIONS=--max-old-space-size=4096 npm run build ``` En cas d'erreur du type: `FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory` Solution : `export NODE_OPTIONS=--max-old-space-size=4096` [Solved: How to Fix “JavaScript Heap Out of Memory Error” ](https://geekflare.com/fix-javascript-heap-out-of-memory-error/) ### gpx.rnmkcy.eu Après la construction on copie le dossier `build` sous `/var/www/gpx` ```bash sudo cp -r /sharenfs/rnmkcy/gpx.studio/website/build /var/www/gpx.studio # les droits sudo chown www-data:www-data -R /var/www/gpx.studio ``` Le site est accessible dans le dossier `/sharenfs/rnmkcy/gpx.studio/website/build/` Configuration nginx `/etc/nginx/conf.d/gpx.rnmkcy.eu.conf` ``` server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name gpx.rnmkcy.eu; include /etc/nginx/conf.d/security.conf.inc; root /var/www/gpx.studio/; location / { index index.html; } } ``` Vérifier et recharger nginx sudo nginx -t sudo systemctl reload nginx Accès par le lien ![](/images/gpx.studio01a.png) ### Reconstruction Après modification des sources, exécution du script `rebuild` Création script `/usr/local/bin/rebuild` sudo nano /usr/local/bin/rebuild ```bash #!/bin/bash echo "Départ exécution script" # Construction cd /sharenfs/rnmkcy/gpx.studio/website rm -r build/ # si existant export NODE_OPTIONS=--max-old-space-size=4096 npm run build # Mise à jour site nginx sudo rm -r /var/www/gpx.studio sudo cp -r /sharenfs/rnmkcy/gpx.studio/website/build /var/www/gpx.studio sudo chown www-data:www-data -R /var/www/gpx.studio # Recharger nginx sudo systemctl reload nginx echo "Fin exécution script" ``` Droits en exécution sudo chmod +x /usr/local/bin/rebuild ## Crédits Ce projet utilise les projets open source suivants: - Développement : - [Svelte](https://github.com/sveltejs/svelte) and [SvelteKit](https://github.com/sveltejs/kit) — seamless development experience - [MDsveX](https://github.com/pngwn/MDsveX) — permettant une documentation basée sur Markdown - [svelte-i18n](https://github.com/kaisermann/svelte-i18n) - localisation facile - Design: - [shadcn-svelte](https://github.com/huntabyte/shadcn-svelte) — beaux composants - [lucide-svelte](https://github.com/lucide-icons/lucide/tree/main/packages/lucide-svelte) — belles icônes - [tailwindcss](https://github.com/tailwindlabs/tailwindcss) - un style facile - [Chart.js](https://github.com/chartjs/Chart.js) — graphiques magnifiques et rapides - Logique : - [immer](https://github.com/immerjs/immer) — gestion complexe de l ' État - [Dexie.js](https://github.com/dexie/Dexie.js) — IndexedDB wrapper - [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) — Fast GPX file parsing - [SortableJS](https://github.com/SortableJS/Sortable) — créant un arbre de fichiers triable - Mapping: - [Mapbox GL JS](https://github.com/mapbox/mapbox-gl-js) — cartes interactives magnifiques et rapides - [brouter](https://github.com/abrensch/brouter) — Moteur de routage - [OpenStreetMap](https://www.openstreetmap.org) — map data used by Mapbox and brouter - Recherche : - [DocSearch](https://github.com/algolia/docsearch) — moteur de recherche de la documentation ## Annexe ### gpx.studio mode dev npm run dev Le serveur est accessible sur le lien , q pour sortir ``` > website@0.0.1 dev > vite dev Forced re-optimization of dependencies VITE v5.4.8 ready in 1305 ms ➜ Local: http://localhost:5173/ ➜ Network: use --host to expose ➜ press h + enter to show help Browserslist: caniuse-lite is outdated. Please run: npx update-browserslist-db@latest Why you should do it regularly: https://github.com/browserslist/update-db#readme ``` L'exécution a lieu sur un serveur, utilisation de SSH tunneling, sur un poste ayant un accès SSH, ouvrir un terminal et exécuter la commande suivante ```bash ssh -L 9500:localhost:5173 leno@192.168.0.215 -p 55215 -i /home/yann/.ssh/lenovo-ed25519 ``` Puis ouvrir le lien suivant dans un navigateur : localhost:9500]]>