Août 082023
 

uPnpc est un client qui permet d’ouvrir des ports dynamiquement dans le firewall.
Ca évite de se connecter dans sa box internet et de configurer (et oublier) des trous dans la sécurité.
Je l’utilise pour ouvrir temporairement le port 80 utilisé par certbot afin de générer un certificat Letsencrypt.
L’image docker générée pèse 8Mo.

Le code que je vous ai écrit ci-dessous fait plusieurs choses :

  • Aller chercher le dernier code source disponible pour uPnpc
  • Créer un docker alpine spécifique à la compilation du package (ce docker sera détruit en fin de génération)
  • Compiler et extraire les fichiers compilés hors du docker.
  • Créer un nouveau docker le plus petit possible (alpine) avec injection des binaires fraichement compilés.
  • Exporter l’image docker dans un fichier tar afin de l’utiliser ailleurs.
### Docker pour upnpc --> µ PNP Client --> ouvrir des ports dans le firewall dynamiquement.


## Installation de docker et de ses prérequis.
sudo apt -y update
sudo apt -y install apt-transport-https ca-certificates curl gnupg2 software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee -a  /etc/apt/sources.list.d/docker.list
sudo apt -y install docker-ce docker-ce-cli containerd.io
sudo systemctl enable docker

## Détecter la derniere version : http://miniupnp.free.fr/files/rest.php/tags?count=1
sudo apt install jq curl
upnpcLatest=`curl http://miniupnp.free.fr/files/rest.php/tags?count=1 | jq -r ".tags.miniupnpc | .[] | .file"`

## Créer le conteneur docker qui servira à compiler
cat <<ENDOFFILE >Dockerfile
  FROM alpine:latest
  RUN apk add alpine-sdk
  RUN wget http://miniupnp.free.fr/files/download.php?file=$upnpcLatest -O latest.tar.gz ; tar -zxf latest.tar.gz ;cd miniupnpc-* ; make; mkdir /deploy ; make DESTDIR=/deploy install; make install
  ENTRYPOINT ["/deploy/usr/bin/upnpc"]
ENDOFFILE

## Compiler le docker
sudo docker build -t miniupnpc .

## Tester
sudo docker rm miniupnpc 2>/dev/null
sudo docker run --interactive --tty --network host --name miniupnpc miniupnpc --help

## Extraire les fichiers compilés
mkdir AlpineBinaries
sudo docker cp miniupnpc:/deploy ./AlpineBinaries

## Supprimer le docker 'miniupnpc' temporaire
sudo docker rm miniupnpc 2>/dev/null

## Créer le fichier de build docker
cat <<ENDOFFILE >Dockerfile
  FROM alpine:latest
  COPY AlpineBinaries/deploy /
  ENTRYPOINT ["/usr/bin/upnpc"]
ENDOFFILE

## Créer un nouveau docker avec uniquement l'applicatif upnpc
sudo docker build -t miniupnpc .

## Test de l'image
sudo docker rm miniupnpc 2>/dev/null
sudo docker run --rm --interactive --tty --network host --name miniupnpc miniupnpc --help

## Nettoyer les dernières traces
sudo rm -rf AlpineBinaries
sudo docker rm miniupnpc 2>/dev/null
rm Dockerfile

## Sauver l'image dans un fichier tar
sudo docker save --output miniupnpc.tar miniupnpc

Ensuite, comment l’utiliser?
Exemple, je voudrais ouvrir le port 80 sur ma box et le rediriger sur le port 80 de mon serveur (192.168.0.2):

sudo docker run --rm --interactive --tty --network host miniupnpc -a 192.168.0.2 80 80 tcp

Et pour supprimer l’ouverture du port 80, dans la même logique :

sudo docker run --rm --interactive --tty --network host miniupnpc -d 80 tcp
Juil 082023
 

Résolution de l’écran de connection:

Éditer le fichier /etc/lightdm/lightdm.conf et ajouter la ligne suivante JUSTE APRÈS la section [Seat:*]

display-setup-script = xrandr —output XXXX —resolution 1920x1080

Drivers AWUS1900 pour Kali sous Raspberry Pi

git clone https://github.com/morrownr/8814au.git
cd 8814au
make
sudo make install
lsmod

Configurer Grub pour la carte HiDpi

grub-mkfont --output=/boot/grub/fonts/DejaVuSansMono32.pf2 --size=32 /usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf
echo -e "\nGRUB_FONT=/boot/grub/fonts/DejaVuSansMono32.pf2" | tee -a /etc/default/grub
update-grub
sed -i -e 's/^[[:space:]]*FONTFACE.*$/#\0\nFONTFACE="TER"/' /etc/default/console-setup
sed -i -e 's/^[[:space:]]*FONTSIZE.*$/#\0\nFONTSIZE="16x32"/' /etc/default/console-setup

Déc 282022
 

Si v4l2rtspserver ne fonctionne pas avec vous non plus, voici une alternative old-school basée sur ‘Motion’

apt install motion

Créer le fichier de config /etc/systemd/system/motion.service

#
# This systemd unit file is part of the motion project:
#
# https://motion-project.github.io/
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of version 2 of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this program. If not, see
# <https://www.gnu.org/licenses/old-licenses/gpl-2.0.html>
#

[Unit]
Description=Motion - monitor live video, trigger responses, record video/stills.
Documentation=man:motion(1)
After=local-fs.target network.target

[Service]
User=motion
#EnvironmentFile=-/etc/default/motion
# The the sleep on the following line is needed with systemd version
# 232, otherwise the error message that we echo doesn't hit 'systemctl
# status'.
ExecStart=/bin/sh -c 'exec /usr/bin/motion -n'
Type=simple
# Set StandardError=journal to use journald to log messages from motion.
# See also the "log_file" config file option in motion(1) and
# systemd.service(5).
StandardError=null
ExecReload=@KILL@ -HUP $MAINPID
Restart=on-failure
RestartSec=5
# Don't restart if unconfigured / misconfigured e.g. daemon disabled
# in defaults file. See also /usr/include/sysexits.h or sysexits(3)
RestartPreventExitStatus=78
# To tune restart behaviour, see systemd.unit(5) and use
# "systemctl edit motion" to change the following settings:
#StartLimitBurst=
#StartLimitIntervalSec=
#StartLimitAction=
#FailureAction=
# The following can be used to increase the security of the
# installation, by mitigating risk from attacks on motion and the
# binaries, libraries and scripts which it relies on. They are disabled
# by default in case they break existing installations, e.g. those which
# call site-local scripts which would inherit the same restrictions.
#
# See systemd.exec(5) and
# http://0pointer.net/public/systemd-nluug-2014.pdf for more details
# of these and other related options.
#
# Use "systemctl edit motion" to change these settings.
#PrivateTmp=true
#NoNewPrivileges=yes
#PrivateNetwork=yes
#ProtectHome=yes
#DeviceAllow=/dev/video0
#MountFlags=slave
#SystemCallFilter=

[Install]
WantedBy=multi-user.target

Et l’activer avec :

systemctl enable motion

Créer le fichier de configuration de motion :: /etc/motion/motion.conf

daemon on
framerate 10
stream_port 8081
stream_quality 100
stream_localhost off
stream_motion off
stream_maxrate 10
webcontrol_localhost off
quality 80
width 640
height 480
post_capture 5
pre_capture 2
ffmpeg_output_movies OFF
output_pictures OFF
Juin 302022
 

Trouver le chemin du disque

Identifier les partitions existantes et la place libre

partedUtil getptbl /vmfs/devices/disks/t10.ATA_____HGST_HTS721010A9E630__________________________JR10006PHDWJHE

gpt
121601 255 63 1953525168
1 64      204863   C12A7328F81F11D2BA4B00A0C93EC93B systemPartition 128
5 208896  1232895  EBD0A0A2B9E5443387C068B6B72699C7 linuxNative 0
6 1234944 2258943  EBD0A0A2B9E5443387C068B6B72699C7 linuxNative 0
7 2260992 15470591 4EB2EA3978554790A79EFAE495E21F8D vmfsl 0
  • Je peux créer à partir de la partition 8
  • Je peux prendre le dernier block utilisé (15470591) +1 (block suivant) +2048(taille de block) = 15472640
  • Mon disque a une taille de (1953525168) – les blocks précédents (15472640) = 1938052528

Trouver les identifiants de partitions

partedUtil showGuids
 Partition Type       GUID
 vmfs                 AA31E02A400F11DB9590000C2911D1B8
 vmkDiagnostic        9D27538040AD11DBBF97000C2911D1B8
 vsan                 381CFCCC728811E092EE000C2911D0B2
 virsto               77719A0CA4A011E3A47E000C29745A24
 VMware Reserved      9198EFFC31C011DB8F78000C2911D1B8
 Basic Data           EBD0A0A2B9E5443387C068B6B72699C7
 Linux Swap           0657FD6DA4AB43C484E50933C84B4F4F
 Linux Lvm            E6D6D379F50744C2A23C238F2A3DF928
 Linux Raid           A19D880F05FC4D3BA006743F0F84911E
 Efi System           C12A7328F81F11D2BA4B00A0C93EC93B
 Microsoft Reserved   E3C9E3160B5C4DB8817DF92DF00215AE
 Unused Entry         00000000000000000000000000000000

Ajouter une partition

partedUtil add /vmfs/devices/disks/t10.ATA_____HGST_HTS721010A9E630__________________________JR10006PHDWJHE gpt « 8 15472640 1938052528 AA31E02A400F11DB9590000C2911D1B8 0″

partedutil add <chemin du disque> <partition type> <partition numéro> <Secteur de début> <secteur de fin> <type de partition> 0 (je ne sais pas a quoi sert le zéro)

La formater

vmkfstools -C  vmfs6 -S « LOCAL Datastore » /vmfs/devices/disks/t10.ATA_____HGST_HTS721010A9E630__________________________JR10006PHDWJHE:8

-C ‘type de formatage’  -S ‘nom du datastore’  <chemin du disque : numéro de partition>

Sep 012020
 

Vous souhaitez avoir un Octoprint disponible pour votre imprimante 3D et avez un Onion Omega2+ qui traine ? c’est parti !

Ce document est TRES fortement basé sur le site  https://community.onion.io/topic/1569/octoprint-3d-print-server-on-omega2/15.

Allez les voir, leur boulot est super !

Pré-requis :

  • Un onion Omega2+ (testé en version 0.3.2 b237)
  • Une dock avec port USB
  • Une carte micro SD (4go est suffisant)
  • Un Onion à la dernière version et connecté à Internet.

 

Rappel :

  • Pour configurer le wifi en ligne de commande : wifisetup
  • Pour mettre à jour l’Omega2+ à la dernière version : oupgrade

Installer les pré-requis

  1. En ligne de commande :

opkg update

opkg install fdisk e2fsprogs block-mount swap-utils

Utiliser la carte SD pour augmenter l’espace disponible.

  1. Insérer une carte microSD dans l’Omega2+ et formatez-la.
    Normalement, elle se trouvera dans /dev/mmcblk0 et la première partition sera /dev/mmcblk0p1
    Vous pouvez le vérifier avec la commande fdisk -l
  2. Formatter la carte SD en EXT4

umount /dev/mmcblk0p1
mkfs.ext4 /dev/mmcblk0p1

  1. Monter la carte SD

umount /dev/mmcblk0p1

mkdir /mnt/SD

mount /dev/mmcblk0p1 /mnt/SD

  1. Copier le système de fichier actuel.

tar -C /overlay -cvf – . | tar -C /mnt/SD/ -xf –

umount /mnt/SD

  1. Configurer le système pour monter la carte SD automatiquement au démarrage du système

block detect > /etc/config/fstab

  • Éditer /etc/config/fstab
    remplacer option target ‘/mnt/mmcblk0p1’ par option target ‘/overlay’
    et option enabled ‘0’ par option enabled ‘1’
  1. On redémarre l’Omega2+ pour vérifier que tout fonctionne.

reboot

  1. Après avoir redémarré, tapez la commande df -h afin de vérifier si la carte SD est bien montée.

Filesystem                Size      Used Available Use% Mounted on

/dev/root                 7.8M      7.8M         0 100% /rom

tmpfs                    60.9M     96.0K     60.8M   0% /tmp

/dev/mmcblk0p1            7.2G     33.5M      6.8G   0% /overlay

overlayfs:/overlay        7.2G     33.5M      6.8G   0% /

tmpfs                   512.0K         0    512.0K   0% /dev

/dev/mmcblk0p1            7.2G     33.5M      6.8G   0% /mnt/mmcblk0p1

/dev/mtdblock6           22.1M    764.0K     21.3M   3% /mnt/mtdblock6

/dev/mtdblock7          512.0K    196.0K    316.0K  38% /mnt/mtdblock7

Ajouter un fichier de SWAP (car on n’a pas assez de RAM).

On va avoir (entre-autre) besoin de compiler Python pour utiliser une version un peu plus moderne d’Octoprint que la 1.0.0, on va donc ajouter 512Mo de RAM.

  1. Configurer un fichier de SWAP et le monter

dd if=/dev/zero of=/swap.page bs=1M count=512

chmod 0600 /swap.page

mkswap /swap.page

swapon /swap.page

  1. On vérifie qu’on a bien les 512Mo de SWAP disponible avec la commande free.

root@Omega-AC5B:/# free

total       used       free     shared    buffers     cached

Mem:        124808     102472      22336         96       7068      72148

-/+ buffers/cache:      23256     101552

Swap:       524284          0     524284

Installer Octoprint.

  1. Ajoutez la source de package nécessaire à Python
    Editer le fichier /etc/opkg/distfeeds.conf et enlever le commentaire devant :

    • src/gz openwrt_base http://downloads.openwrt.org/releases/18.06-SNAPSHOT/packages/mipsel_24kc/base
    • src/gz openwrt_packages http://downloads.openwrt.org/releases/18.06-SNAPSHOT/packages/mipsel_24kc/packages
  2. Lancez l’installation

opkg update

opkg install gcc unzip python-dev python-pip –force-overwrite

pip install –upgrade setuptools

  1. Étendre le répertoire /tmp sur carte SD

mkdir overlay/tmp

rm -rf /overlay/tmp/*

cp -a /tmp/* /overlay/tmp/

umount /tmp

[ $? -ne 0 ] && {

umount -l /tmp

}

mount /overlay/tmp/ /tmp

  1. Télécharger Octoprint version 1.3.5

cd /root

wget https://github.com/foosel/OctoPrint/archive/1.3.5.zip

unzip 1.3.5.zip

  1. Bidouiller un peu pour que le compilateur soit reconnu

ln -s /usr/bin/gcc /usr/bin/ccache_cc

  1. Installer tous les pré-requis. Si la commande renvois une erreur, allez consulter le fichier /tmp/pip.log

cd OctoPrint-1.3.5

pip install -r requirements.txt –log /tmp/pip.log

  • Si vous avez l’erreur suivante lors de l’installation des pré-requis :

ERROR: Command errored out with exit status 1: /usr/bin/python2 -u -c ‘import sys, setuptools, tokenize; sys.argv[0] = ‘ »‘ »‘/tmp/pip-install-j0cjRE/psutil/setup.py' »‘ »‘; __file__=' »‘ »‘/tmp/pip-install-j0cjRE/psutil/setup.py' »‘ »‘;f=getattr(tokenize, ‘ »‘ »‘open' »‘ »‘, open)(__file__);code=f.read().replace(‘ »‘ »‘\r\n' »‘ »‘, ‘ »‘ »‘\n' »‘ »‘);f.close();exec(compile(code, __file__, ‘ »‘ »‘exec' »‘ »‘))’ install –record /tmp/pip-record-Qikfg8/install-record.txt –single-version-externally-managed –compile Check the logs for full command output

  • relancez la commande précédente et allez immédiatement modifier le fichier source de psutil (une fois que pip l’a retéléchargé) /tmp/pip-install-*****/psutil/psutil/_psutil_linux.c et commentez la ligne #include <sys/sysinfo.h>
  • Laissez tourner l’installation.
  1. Supprimer les caractères unicode non reconnus.

sed -i ‘s/Häußge/H\./g’ /root/OctoPrint-1.3.5/src/octoprint/util/comm.py

sed -i ‘s/Häußge/H\./g’ /root/OctoPrint-1.3.5/src/octoprint/plugins/virtual_printer/virtual.py

  1. Récupérez l’adresse IP de votre Omega2+ avec la commande ifconfig
  2. Démarrer Octoprint manuellement.

octoprint serve –iknowwhatimdoing &

  1. Connectez-vous sur la page web d’octoprint et vérifiez si ça démarre. http://IP_OMEGA:5000

Configurer le démarrage automatique d’Octoprint.

Parce qu’on n’a pas que ça à faire 😊

  1. Editer le fichier /etc/rc.local et ajouter (avant la ligne exit 0) la commande suivante :

octoprint serve –iknowwhatimdoing &

  1. Configurer Octoprint (via l’interface web) pour qu’il ait les commandes suivantes :
    • Shutdown system : reboot
    • Restart system : reboot
    • Restart Octoprint : reboot

 

 

Jan 292020
 

Sur le PC sur lequel je veux donner accès , je lance ceci :  (j’ai mis le script dans un fichier bat pour qu’il essaie de se recréer constamment)

:debut
  plink.exe -ssh -pw VPNPASS -batch -R 3390:127.0.0.1:3389 VPNUSER@VPN.SERVERNAME.COM
goto debut

Ca veut dire qu’il va créer un port 3390 sur le serveur VPN.SERVERNAME.COM qui pointera directement sur mon PC sur le port 3389.
Je me connecte avec l’utilisateur VPNUSER et le mot de passe VPNPASS

Attention, je n’ai JAMAIS dit que cétait recommandé/sécurisé !

Jan 282020
 

Pour info, la gestion du POE sur un OS6465 est super bizarre…
Voici les étapes que j’ai utilisées pour le faire fonctionner.

R35-ParkingLancierGauche> show lanpower slot 1/1
Port Maximum(mW) Actual Used(mW)   Status    Priority   On/Off   Class   Type
----+-----------+---------------+-----------+---------+--------+-------+----------
  1     30000            0       Powered Off    Low      OFF       .
  2     30000            0       Powered Off    Low      OFF       .
  3     60000            0       Powered Off    Low      OFF       .
  4     30000            0       Powered Off    Low      OFF       .
  5     60000            0       Powered Off    Low      OFF       .
  6     30000            0       Powered Off    Low      OFF       .
  7     60000            0       Powered Off    Low      OFF       .
  8     30000            0       Powered Off    Low      OFF       .

ChassisId 1 Slot 1 Max Watts 0
0 Watts Actual Power Consumed
0 Watts Total Power Budget Used
0 Watts Total Power Budget Available
0 Power Supply Available
'*' appending port maxpower indicates 4pair port operating in 2pair mode

Par défaut, il n’y a pas de source de courant disponible.

R35-ParkingLancierGauche> show powersupply total 
Total Power (watts):   0

Donc, il faut créer une source de courant (je l’ai appelée « integrated »):

no powersupply 1 name "integrated" chassis-id 1
powersupply 1 name "integrated" type ale 24vdc
powersupply enable 1

Activer la source de courant

powersupply enable chassis-id 1 1

Démarrer la function POE

lanpower slot 1/1 service start
Avr 082019
 

Si vous avez détruit les associations des fichiers .JAR en installant un logiciel de type winzip, pas de panique.

La méthode la plus rapide et simple est de lancer les deux commandes suivantes en tant qu’administrateur :

ftype jarfile="C:\Program Files (x86)\Java\jre1.8.0_201\bin\javaw.exe" -jar "%1" %*
assoc .jar=jarfile

Pensez à adapter le chemin de java 🙂

 

Mar 202019
 

Vous l’avez certainement remarqué, si vous fermez votre fenêtre WSL, toutes les tâches (y compris nohup et crontab) s’arrêtent.
L’idée est de démarrer cron au démarrage de votre session Windows (ou pc via tache plannifiée)

D’abord autoriser de lancer cron en root sans mot de passe :

sudo visudo
et ajouter :
%sudo ALL=NOPASSWD: /etc/init.d/cron start

Ensuite, dans le dossier « démarrage » de Windows, rajouter le démarrage de cron via un nouveau shortcut:

C:\Windows\System32\wsl.exe sudo /etc/init.d/cron start

voila..

Mar 062019
 

Si vous lancer une commande graphique avec sudo, vous pourriez avoir cette erreur et ça ne fonctionne pas:

Gtk-WARNING **: cannot open display: :10.0

La solution, ajouter cette ligne à la fin du fichier de configuration de sudo (avec la commande « visudo », je rappelle)

Defaults env_keep="XAUTHORIZATION XAUTHORITY TZ PS2 PS1 PATH LS_COLORS KRB5CCNAME HOSTNAME HOME DISPLAY COLORS"