Outils pour utilisateurs

Outils du site


blog

Notes écran tactile touch screen

Voir :

Pb écran tactile

apt-get install xinput-calibrator xinput
export DISPLAY=:0
 
ID=$(xinput list --id-only "eGalax Inc. USB TouchController")
 
SCREEN=$(xrandr 2>&1|grep -e ' connected primary' | awk '{print $1}')
 
#xinput --map-to-output 11 DVI-D-0
xinput --map-to-output $ID $SCREEN
xinput list-props "eGalax Inc. USB TouchController" |grep -e "Coordinate Transformation Matrix"
        Coordinate Transformation Matrix (155): 0.000000, 0.375000, 0.000000, -1.000000, 0.000000, 1.000000, 0.000000, 0.000000, 1.000000
xinput_calibrator -v --device "eGalax Inc. USB TouchController"

https://askubuntu.com/questions/41385/cannot-calibrate-touchscreen

Persistance

/usr/local/bin/touchscreencfg.sh

#! /bin/bash
 
export DISPLAY=:0
 
NAME=$(xinput list  --name-only |grep -i -e touch | grep -iv -e ' pen')
ID=$(xinput list --id-only "$NAME")
SCREEN=$(xrandr 2>&1 |grep -e ' connected primary' |awk '{print $1}')
/usr/bin/xinput --map-to-output $ID $SCREEN
( sleep 5 ; /usr/bin/xinput --map-to-output $ID $SCREEN ) &
chmod +x /usr/local/bin/touchscreencfg.sh

~/.xsessionrc

/usr/local/bin/touchscreencfg.sh

Pb

Pb persistance sur débranchement ou extinction de l'écran

Notes en vrac - pb débranchement retranchement extinction écran - perte orientation touchscreen

Voir :

68.624] (II) NVIDIA(0): Setting mode "DVI-D-0: nvidia-auto-select @768x1024 +0+0 {ViewPortIn=768x1024, ViewPortOut=1024x768+0+0, Rotation=270}"
modprobe evdev
modprobe usbtouchscreen usbhid
 
cat /proc/bus/input/devices
 
echo Y >  /sys/module/usbtouchscreen/parameters/swap_xy

Enable the Touchscreen in Lightdm (the login screen)

  copy ~/.config/monitors.xml to /var/lib/lightdm/.config
xinput_calibrator --device "Elo Touch Solutions Elo Touch Solutions Pcap USB Interface"  --output-type xorg.conf.d --no-timeout
Calibrating EVDEV driver for "Elo Touch Solutions Elo Touch Solutions Pcap USB Interface" id=8
        current calibration values (from XInput): min_x=0, max_x=4095 and min_y=0, max_y=4095

Doing dynamic recalibration:
        Setting calibration data: 1, 4064, -19, 4082
        --> Making the calibration permanent <--
  copy the snippet below into '/etc/X11/xorg.conf.d/99-calibration.conf' (/usr/share/X11/xorg.conf.d/ in some distro's)
Section "InputClass"
        Identifier      "calibration"
        MatchProduct    "Elo Touch Solutions Elo Touch Solutions Pcap USB Interface"
        Option  "Calibration"   "1 4064 -19 4082"
        Option  "SwapAxes"      "0"
EndSection

/etc/X11/xorg.conf.d/99-calibration.conf

Section "InputClass"
        Identifier      "calibration"
        MatchProduct    "Elo Touch Solutions Elo Touch Solutions Pcap USB Interface"
        Option  "Calibration"   "44 4061 4081 -44"
        Option  "SwapAxes"      "1"
        Option "InvertX"        "0"
        Option "InvertY"        "0"
EndSection
Matrix

https://gist.github.com/mildmojo/48e9025070a2ba40795c#file-rotate_desktop-sh-L41

https://github.com/swkim01/waveshare-dtoverlays

xinput list-props "Elo Touch Solutions Elo Touch Solutions Pcap USB Interface" |grep Matrix
        Coordinate Transformation Matrix (155): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
	
Option "TransformationMatrix" "1 0 0 0 1 0 0 0 1"
Troubleshooting
sudo apt-get install -y evtest

Notes

https://askubuntu.com/questions/253395/touchscreen-calibration-with-dual-monitors-nvidia-and-xinput

https://wiki.archlinux.org/index.php/Calibrating_Touchscreen

Do it automatically via a udev rule

Create a file something like /etc/udev/rules.d/99-acer-touch.rules with contents like this:

ENV{ID_VENDOR_ID}=="2149",ENV{ID_MODEL_ID}=="2703",ENV{WL_OUTPUT}="DVI1",ENV{LIBINPUT_CALIBRATION_MATRIX}="1 0 0  0 1 0"

LXQt

~/.config/autostart/lxqt-config-touchpad-autostart.desktop

[Desktop Entry]
Comment=Autostart touchpad settings for lxqt-config-input
Exec=lxqt-config-input --load-touchpad
Name=lxqt-config-touchpad-autostart
OnlyShowIn=LXQt
Type=Application
Version=1.0
2025/03/24 15:06

Notes Dolibarr

Voir aussi :

  • openconcerto
  • erpnext

Install

http://wiki.dolibarr.org/index.php/Installation_-_Upgrade

apt-get install php5-gd php5-pgsql postgresql
 
adduser --system --home /var/www/dolibarr dolibarr
 
su - dolibarr -s /bin/bash
git clone https://github.com/Dolibarr/dolibarr/
git tag
git checkout 3.8.3
 
exit
 
chown dolibarr: /var/www/dolibarr/dolibarr/htdocs/conf

/etc/php5/fpm/pool.d/dolibarr.conf

[dolibarr]
user = dolibarr
group = dolibarr
listen = /var/run/php5-fpm-dolibarr.sock
listen.owner = www-data
listen.group = www-data
 
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3 
 
chdir = /
 
php_admin_value[error_log] = /var/log/fpm-php.dolibarr.log
php_admin_flag[log_errors] = on
Post install

Après l'install on bloque les urls /install* /etc/nginx/sites-available/dolibarr

        location ~ /install* {
                deny all;
        }
touch /var/www/dolibarr/dolibarr/documents/install.lock

Php ne doit plus pouvoir écrire ici

chown -R www-data: /var/www/dolibarr/dolibarr/htdocs/conf/

Pb

2025/03/24 15:06

Notes DokuWiki API XML-RPC

Généralités

Penser à restreindre l'accès à https://wiki.acme.fr/lib/exe/xmlrpc.php depuis le serveur web

Il faut activer l'option :

remote

Active l'API système distante. Ceci permet à d'autres applications d'accéder au wiki via XML-RPC ou d'autres mécanismes.

Voir aussi l'option :

remoteuser

Restreindre l'accès à l'API à une liste de groupes ou d'utilisateurs (séparés par une virgule). Laisser vide pour donner l'accès tout le monde.

Exemple en Python

pip3 install --user dokuwiki
import dokuwiki
 
wiki=dokuwiki.DokuWiki('https://wiki.acme.fr', 'remoteuser', 'P@ssw0rd')
wiki.version
wiki.send('dokuwiki.getVersion')
wiki.title
wiki.pages.list()
[page['id'] for page in wiki.pages.list('Tech')]
 
# Info
wiki.pages.info('Test')
wiki.send('wiki.getPageInfo','Test')
wiki.pages.versions('Test')
 
# Modification, ajout à une page existente
wiki.pages.append('Test', 'http://linuxfr.org/\n\n', sum='Via XML-RPC', minor=True)
 
# Création nouvelle page avec son lien
wiki.pages.set('Test1', 'Test1 : \n * http://linuxfr.org/')
wiki.pages.append('Test', '[[Test1]]', sum='Via XML-RPC', minor=True)
 
# Recherche motif textuel
[x['id'] for x in wiki.pages.search('linuxfr')]
 
# Effacement page ':Test1' et de son lien présent sur ':Test'
import re
wiki.pages.delete('Test1')
newpage=re.sub('\[\[Test1\]\]', '', wiki.pages.get('Test'))
wiki.pages.set('Test', newpage, sum='XML-RPC', minor=True)

Recherche par date

from datetime import datetime
wiki.pages.changes(datetime(2023, 9, 1).timestamp())

Trouver les pages non référencées

Avec l'extension Dokuwiki

  • orphanswanted plugin

Avec l'API

no_backlink = []
 
for page in wiki.pages.list():
    back_links = wiki.pages.backlinks(page['id'])
    #print(page['id'], '\t', back_links)
    if not back_links:
        no_backlink.append(page['id'])
        #print('\t\t\t', page['id'])
print(no_backlink)

En ligne de commande avec PHP

su - dokuwiki -s /bin/bash -c "php ${DOKUROOT}/bin/wantedpages.php |egrep -v 'playground:playground|sidebar|some:namespaces|wiki:nonexisting|wiki:pagename'"
2025/03/24 15:06

Notes Docker

Trouver et activer les bons dépôts

https://access.redhat.com/downloads/content/package-browser

App Dépôt RedHat
Système OS rhel-7-server-rpms
Docker rhel-7-server-extras-rpms
PHP-FPM rhel-7-server-optional-rpms

Install

Prérequis
Debian

/etc/default/grub

GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
update-grub
RedHat
#grubby --args="user_namespace.enable=1" --update-kernel=/boot/vmlinuz-$(uname -r)
#grubby --args="user_namespace.enable=1" --update-kernel=$(grubby --default-kernel)
grubby --args="user_namespace.enable=1" --update-kernel=ALL

Install paquets

yum install docker-latest #docker #docker-distribution
Si conf proxy Docker et SystemD

Voir https://docs.docker.com/engine/admin/systemd/#httphttps-proxy

mkdir /etc/systemd/system/docker-latest.service.d

/etc/systemd/system/docker-latest.service.d/http-proxy.conf

[Service]
# Environment = "HTTP_PROXY=http://192.168.56.1:3128/" "HTTPS_PROXY=http://192.168.56.1:3128/"
Environment = "http_proxy=http://192.168.56.1:3128/" "https_proxy=http://192.168.56.1:3128/"
#systemctl restart docker
#systemctl enable docker
systemctl daemon-reload
systemctl restart docker-latest
systemctl enable docker-latest

Vérif

systemctl show --property=Environment docker-latest

Sécurité

Droits pour utilisateur non root

¡¡¡ Attention, grosse faille de sécu !!!

docker run -ti --privileged -v /:/host debian chroot /host
docker run -ti --userns=host --privileged -v /:/host debian chroot /host
 
#List images to use one
docker images
#Run the image mounting the host disk and chroot on it
docker run -it -v /:/host/ ubuntu:18.04 chroot /host/ bash
 
# Get full access to the host via ns pid and nsenter cli
docker run -it --rm --pid=host --privileged ubuntu bash
nsenter --target 1 --mount --uts --ipc --net --pid -- bash
 
# Get full privs in container without --privileged
docker run -it -v /:/host/ --cap-add=ALL --security-opt apparmor=unconfined --security-opt seccomp=unconfined --security-opt label:disable --pid=host --userns=host --uts=host --cgroupns=host ubuntu chroot /host/ bash

Voir :

  • --security-opt apparmor=unconfined
  • --security-opt seccomp=unconfined
  • --security-opt label:disable

Voir : http://www.projectatomic.io/blog/2015/08/why-we-dont-let-non-root-users-run-docker-in-centos-fedora-or-rhel/

ls -l /var/run/docker.sock
groupadd docker
usermod -aG docker process
#chgrp docker /var/run/docker.sock
#systemctl restart docker
systemctl restart docker-latest

Voir :

  • Podman
  • kata-containers
Droits montage
docker run -v /mnt:/mnt:ro

doesn't really make /mnt inside the container read-only Submounts like /mnt/usbdisk are writable

Autres - seccomp

https://docs.docker.com/engine/security/apparmor/

docker run --rm -it --security-opt seccomp=unconfined debian:jessie unshare --map-root-user --user sh -c whoami

Espace de nom (namespace)

Le fichier /etc/sysconfig/docker n'est pas utilisé avec SystemD

/etc/sysconfig/docker

#OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false'

A la place ( Attention, a vérifier, fichier crée sur une Debian)

Pour activer le namespace

“userns-remap”: “default”

sysctl -w kernel.unprivileged_userns_clone=1

/etc/docker/daemon.json

{
        "userns-remap": "default",
        "log-driver": "journald",
        "storage-driver": "devicemapper",
        "graph": "/var/lib/docker",
        "storage-opts": [
        "dm.thinpooldev=/dev/mapper/vgos-docker0",
        "dm.metadatadev=/dev/mapper/vgos-docker0meta",
        "dm.use_deferred_removal=true",
        "dm.use_deferred_deletion=true"
    ]
}

Voir :

man dockerd
docker daemon --help
systemctl daemon-reload

Stockage

Info :

docker info | grep "Data Space"

device-mapper-driver

lvcreate -y -l 1%FREE -n docker0meta vgos
lvcreate -y -l 95%FREE -n docker0 vgos
lvconvert -y \
--zero n \
-c 512K \
--thinpool vgos/docker0 \
--poolmetadata vgos/docker0meta
mkdir /etc/lvm/profile/

/etc/lvm/profile/docker-thinpool.profile

activation {
  thin_pool_autoextend_threshold=80
  thin_pool_autoextend_percent=20
}
lvchange --metadataprofile docker-thinpool vgos/docker0
 
lvs -o+seg_monitor

Pour identifier les conteneurs utilisant un volume spécifique

docker ps -a --filter volume=data-nfs3
Notes RedHat

/usr/lib/docker-storage-setup/docker-storage-setup

The Docker config is --storage-driver=devicemapper --storage-opt dm.thinpooldev=/dev/mapper/docker-pool0

docker-storage-setup

/etc/sysconfig/docker-storage

#DOCKER_STORAGE_OPTIONS="--storage-driver devicemapper --storage-opt dm.fs=xfs --storage-opt dm.thinpooldev=/dev/mapper/rhel-docker--pool --storage-opt dm.use_deferred_removal=true "
DOCKER_STORAGE_OPTIONS="--storage-driver devicemapper --storage-opt dm.fs=xfs --storage-opt dm.thinpooldev=/dev/mapper/rhel-docker0 --storage-opt dm.use_deferred_removal=true "

Voir aussi :

  • /usr/lib/docker-storage-setup/docker-storage-setup
Debian
RedHat 7

docker-latest à la 1ere install

/etc/sysconfig/docker-latest-storage

# This file may be automatically generated by an installation program.
 
# By default, Docker uses a loopback-mounted sparse file in
# /var/lib/docker.  The loopback makes it slower, and there are some
# restrictive defaults, such as 100GB max storage.
 
# If your installation did not set a custom storage for Docker, you
# may do it below.
 
# Example: Use a custom pair of raw logical volumes (one for metadata,
# one for data).
# DOCKER_STORAGE_OPTIONS = --storage-opt dm.metadatadev=/dev/mylogvol/my-docker-metadata --storage-opt dm.datadev=/dev/mylogvol/my-docker-data
 
DOCKER_STORAGE_OPTIONS=

Réseau

List Docker Container Names and IPs
function drips(){
    docker ps -q | xargs -n 1 docker inspect --format '{{ .NetworkSettings.IPAddress }} {{ .Name }}' | sed 's/ \// /'
}

Source : https://gist.github.com/ipedrazas/2c93f6e74737d1f8a791

/etc/hosts

Default gateway
Le hôte du container est indiqué par host.containers.internal (podman)

/etc/hosts

127.0.0.1       localhost localhost.localdomain localhost4 localhost4.localdomain4
::1     localhost localhost.localdomain localhost6 localhost6.localdomain6
10.246.223.27   srv1.acme.local srv1
10.88.0.1       host.containers.internal
10.88.0.176     1264dc4981c1 boring_chaplygin
Conf Default bridge VLAN

/etc/docker/daemon.json

{
"bip": "192.168.10.1/24"
}

Vérif

docker info |grep -i warn
 
systemctl status docker

Import / Export images Docker

Enregistrer / Sauvegarder l'image Docker(tarball) :

docker save -o <save image to path> <image name>

Importer l'image sur un autre système, par exemple

docker load -i <path to image tar file>

Debug

Test

docker run --rm hello-world
#systemctl stop docker
systemctl stop docker-latest ; rm -rf /var/lib/docker ; /usr/bin/docker daemon --debug --storage-driver 'devicemapper' --storage-opt 'dm.thinpooldev=/dev/mapper/docker-pool0' --storage-opt 'dm.fs=xfs' --storage-opt 'dm.use_deferred_removal=true'

Autres

Architecture x86 amd64 arm
docker run --platform linux/amd64 --publish 8000:8080 ghcr.io/mermaid-js/mermaid-live-editor
Notes brouillon
Namespace

Perf strest test pour prod

Pb

docker run --rm hello-world
nsenter: unable to unshare namespaces: Invalid argument
container_linux.go:247: starting container process caused "process_linux.go:245: running exec setns process for init caused \"exit status 1\""
/usr/bin/docker-current: Error response from daemon: invalid header field value "oci runtime error: container_linux.go:247: starting container process caused \"process_linux.go:245: running exec setns process for init caused \\\"exit status 1\\\"\"\n".

Notes Docker old

Note sécurité :

Voir :

Docker avec tous les services (ssh, cron, initlike)

Nginx reverse proxy pour Docker

Pb de sécurité

docker run -ti --privileged -v /:/host fedora chroot /host

Voir http://www.projectatomic.io/blog/2015/08/why-we-dont-let-non-root-users-run-docker-in-centos-fedora-or-rhel/

Voir aussi

Usage of loopback devices is strongly discouraged for production use. Either use `--storage-opt dm.thinpooldev` or use `--storage-opt dm.no_warn_on_loop_devices=true` to suppress this warning.
# docker -d
INFO[0000] Listening for HTTP on unix (/var/run/docker.sock) 
INFO[0000] [graphdriver] using prior storage driver "devicemapper" 
WARN[0000] Your kernel does not support cgroup memory limit: mountpoint for memory not found 
WARN[0000] mountpoint for cpu not found                 
FATA[0000] Error mounting devices cgroup: mountpoint for devices not found
Proxy
export ALL_PROXY="http://192.168.56.1:3128/"
Construire un Docker avec un Dockerfile
cd MonDossierQuiContientUnDockerfile
docker build -t mondocker .

Exemple de commandes

docker pull debian
docker images
docker images -q
docker info
docker version
docker ps -a
docker ps -q -n 1
docker ps -f name=etherpad1
docker logs --tail 0 -f <container_id>
docker run -ti -p 53:53 -p 53:53/udp --name bind debian /bin/bash
docker ps
docker exec -it a6cc3efa1aa1 /bin/bash
cat context.tar | docker build - 
run builder_image | docker build -
 
docker run -v /:/my_host ubuntu:ro ls /my_host
 
docker port
 
docker inspect

Connaître le “CONTAINER ID”

#docker run -d <nom image>
 
JOB1=$(docker run -d conteneur)
docker logs $JOB1
docker stop $JOB1
docker pull debian
docker run -i -t debian /bin/bash
docker rm $(docker ps -q -a)

adduser jean docker
 
docker run -d -p 7777:8000 zerobin su -l www-data -c 'zerobin --settings-file=settings.py'
docker run -d -p 80:80 --name my_wiki mprasil/dokuwiki

Liens :

Suis-je dans un conteneur (container) ?

grep 'systemd:/system.slice/docker-' /proc/self/cgroup

Notes gestion des process services grâce à supervisor

Notes supervision

Machine de dev, commit effectué dans des images non nommé (doit être zero)

docker images |sed -e '1d' | grep '^<none>' |awk '{print $3}' | wc -l

Logs d'erreur

grep CRIT /var/lib/docker/containers/*/*.log

Notes DNS Bind9

Sur l'hôte

docker run -ti -p 53:53 -p 53:53/udp --name bind debian /bin/bash

Dans le conteneur

apt-get install --no-install-recommends bind9 bind9-doc bind9-host dnsutils
apt-get install --no-install-recommends supervisor vim file netcat tmux traceroute mtr net-tools dnsutils bind9 bind9-doc bind9utils
apt-get install --no-install-recommends lsb-release wget ca-certificates
Pb

Limitation limite de mémoire -m 512m

docker run -ti -m 512m --name madebian1 debian /bin/bash

Erreur

WARNING: Your kernel does not support memory limit capabilities. Limitation discarded.

/etc/default/grub

GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
update-grub
Pb 2

http://stackoverflow.com/questions/31197724/shutting-down-docker-containers-via-supervisor

J'ai le même pb.

A l’arrêt de l'hôte les conteneurs ne sont pas correctement stop et supprimés par supervisord.

Je dois faire manuellement après un reboot :

docker rm $(docker -a -q)

Pour faire les choses proprement c'est à supervisord de n'en occuper

Pb 3 Unable to enable SKIP DNAT rule

Sur RedHat

Source : https://github.com/wodby/docker4drupal/issues/211

Internal Server Error ("Failed to Setup IP tables: Unable to enable SKIP DNAT rule: (iptables failed: iptables --wait -t nat -I DOCKER -i br-38e86077394a -j RETURN: iptables: No chain/target/match by that name.\n (exit status 1))")"

Solution

sudo iptables -t filter -N DOCKER
sudo systemctl restart docker

Cela se produit quand Docker est installé quand le pare-feu (firewalld) est démarré, puis qu'il a été désactivé par la suite.

Autre
docker save -o plop.tar.gz acme/jibe
Notes console TTY

https://github.com/docker/docker/issues/2838

Starting with docker 0.6.5, you can add -t to the docker run command, which will attach a pseudo-TTY. Then you can type Control-C to detach from the container without terminating it.

If you use -t and -i then Control-C will terminate the container. When using -i with -t then you have to use Control-P Control-Q to detach without terminating.

Notes Haute dispo / Cluster

docker swarm

Notes catalogue images

CentOS7

docker pull centos:centos7

Notes Docker

#docker save acme/plop1 -o acme-plop1.tar
docker save acme/plop1 |pigz > acme-plop1.tar.gz

Une sorte de top

docker stats
docker history IMAGES --no-trunc
docker top CONTAINER -o pid,user,%mem,rss,vsize,cmd --sort rss
docker top CONTAINER
cat > Dockerfile <<EOF
FROM alpine
# on déclare un volume
VOLUME /opt/data
# pas la peine le de le laisser tourner
# les volumes sont accessibles même
# quand le conteneur ne tourne plus
CMD ["true"]
EOF
docker build -t $USER/dataexample .
docker run -it -d --name data $USER/dataexample
 
docker run --rm -it --volumes-from data alpine sh
touch /opt/data/foo
exit
 
$ docker run --rm -it --volumes-from data alpine sh
ls /opt/data
foo

Plop

docker run -it --volume /opt/data --name data2 busybox
 
docker inspect --format "{{ .Mounts }}" data2
docker inspect -f '{{ .Mounts }}' my-container
 
 
docker volume create --name dataa
docker run --rm -it -v dataa:/data alpine
 
docker volume ls
docker volume rm $(docker volume ls | awk '{print $2}' |sed '1d')

Arrêter tous les containers

docker stop $(docker ps |awk '{print $1}' |sed '1d')

Effacer tous les containers

docker rm $(docker ps -a |awk '{print $1}' |sed '1d')

Autres

docker system df
docker system prune
 
docker ps --all -q -f status=dead
 
alias docker_clean_images='docker rmi $(docker images -a --filter=dangling=true -q)'
alias docker_clean_ps='docker rm $(docker ps --filter=status=exited --filter=status=created -q)'

Cli / API

$ docker-machine.exe env master
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.103:2376"
export DOCKER_CERT_PATH="C:\Users\FORMATION\.docker\machine\machines\master"
export DOCKER_MACHINE_NAME="master"
export COMPOSE_CONVERT_WINDOWS_PATHS="true"
2025/03/24 15:06
blog.txt · Dernière modification : de 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki