Tutoriels informatiques

46 Sujets 353 Messages
  • 1 Votes
    1 Messages
    311 Vues

    horizontal-logo-monochromatic-white.png

    Bonjour à tous,

    Voici un petit tutoriel pour vous présenter ce qu’est Docker, comment l’installer sur un système Debian et apprendre à l’utiliser à minima.

    Table des matières C’est quoi Docker À quoi sert Docker ? Comment fonctionne la technologie Docker ? La technologie Docker est-elle la même que celle des conteneurs Linux traditionnels ? Les avantages des conteneurs Docker Modularité Couches et contrôle des versions d’image Restauration Déploiement rapide Installation de Docker Utilisation basique de Docker Désinstaller Docker Travailler avec Docker Sources C’est quoi Docker

    – Le logiciel « Docker » est une technologie de conteneurisation qui permet la création et l’utilisation de conteneurs Linux.

    – La communauté Open Source Docker travaille à l’amélioration de cette technologie disponible gratuitement pour tout le monde.

    – L’entreprise Docker Inc. s’appuie sur le travail de la communauté Docker, sécurise sa technologie et partage ses avancées avec tous les utilisateurs. Elle prend ensuite en charge les technologies améliorées et sécurisées pour ses clients professionnels.

    À quoi sert Docker ?

    – Avec la technologie Docker, vous pouvez traiter les conteneurs comme des machines virtuelles très légères et modulaires. En outre, ces conteneurs vous offrent une grande flexibilité : vous pouvez les créer, déployer, copier et déplacer d’un environnement à un autre, ce qui vous permet d’optimiser vos applications pour le cloud.

    Comment fonctionne la technologie Docker ?

    – La technologie Docker utilise le noyau Linux et des fonctions de ce noyau, telles que les groupes de contrôle cgroups et les espaces de noms, pour séparer les processus afin qu’ils puissent s’exécuter de façon indépendante.

    – Cette indépendance reflète l’objectif des conteneurs : exécuter plusieurs processus et applications séparément les uns des autres afin d’optimiser l’utilisation de votre infrastructure tout en bénéficiant du même niveau de sécurité que celui des systèmes distincts.

    – Les outils de conteneurs, y compris Docker, sont associés à un modèle de déploiement basé sur une image. Il est ainsi plus simple de partager une application ou un ensemble de services, avec toutes leurs dépendances, entre plusieurs environnements.

    – Docker permet aussi d’automatiser le déploiement des applications (ou d’ensembles de processus combinés qui forment une application) au sein d’un environnement de conteneurs.

    – Ces outils conçus sur des conteneurs Linux (d’où leur convivialité et leur singularité) offrent aux utilisateurs un accès sans précédent aux applications, la capacité d’accélérer le déploiement, ainsi qu’un contrôle des versions et de l’attribution des versions.

    La technologie Docker est-elle la même que celle des conteneurs Linux traditionnels ?

    Non. À l’origine, la technologie Docker a été créée sur la base de la technologie LXC, que la plupart des utilisateurs associent aux conteneurs Linux « traditionnels », mais elle s’est depuis émancipée.

    LXC était un outil de virtualisation léger très utile, mais il n’offrait pas une expérience à la hauteur pour les utilisateurs ou les développeurs.

    – La technologie Docker permet non seulement d’exécuter des conteneurs, mais aussi de simplifier leur conception et leur fabrication, l’envoi d’images, le contrôle des versions d’image, etc.

    traditional-linux-containers-vs-docker_0.png

    – Les conteneurs Linux traditionnels utilisent un système init capable de gérer plusieurs processus. Ainsi, des applications entières peuvent s’exécuter comme un bloc.

    – La technologie Docker encourage la décomposition des applications en processus distincts et fournit les outils nécessaires pour y parvenir. Cette approche granulaire présente bien des avantages.

    Les avantages des conteneurs Docker Modularité

    – L’approche de Docker en matière de conteneurisation repose sur la décomposition des applications : c’est-à-dire la capacité de réparer ou de mettre à jour une partie d’une application sans devoir désactiver l’ensemble de cette dernière.

    – En plus de cette approche basée sur les microservices, Docker vous permet de partager des processus entre différentes applications quasiment comme vous le feriez avec une architecture orientée services (SOA).

    Couches et contrôle des versions d’image

    – Chaque fichier image Docker est composé d’une série de couches. Ces couches sont assemblées dans une image unique. Chaque modification de l’image engendre la création d’une couche. Chaque fois qu’un utilisateur exécute une commande, comme run ou copy, une nouvelle couche se crée.

    – Docker réutilise ces couches pour la construction de nouveaux conteneurs, accélérant ainsi le processus de construction. Les modifications intermédiaires sont partagées entre les images, ce qui optimise la vitesse, la taille et l’efficacité.

    – Qui dit superposition de couches, dit contrôle des versions. À chaque changement, un journal des modifications est mis à jour afin de vous offrir un contrôle total des images de votre conteneur.

    Restauration

    – La fonction la plus intéressante de la superposition de couches est sans doute la restauration. Chaque image est composée de couches. Aussi, si l’itération actuelle d’une image ne vous convient pas, vous pouvez restaurer la version précédente. —

    – Cette fonction favorise le développement agile et vous aide à mettre en œuvre les pratiques d’intégration et de déploiement continus (CI/CD) au niveau des outils.

    Déploiement rapide

    – Avant, il fallait plusieurs jours pour mettre en place du nouveau matériel, le faire fonctionner, l’approvisionner et le rendre disponible. C’était un processus complexe et fastidieux.

    – Aujourd’hui, avec les conteneurs Docker, vous pouvez effectuer tout cela en quelques secondes seulement. En créant un conteneur pour chaque processus, vous pouvez rapidement partager les processus similaires avec les nouvelles applications.

    – De plus, comme vous n’avez pas besoin de redémarrer le système d’exploitation pour ajouter ou déplacer un conteneur, le délai de déploiement s’en trouve encore réduit.

    – Et ce n’est pas tout. La vitesse du déploiement est telle que vous pouvez vous permettre de créer et de détruire facilement et à moindre coût les données de vos conteneurs, sans aucun problème.

    – Pour résumer, la technologie Docker propose une approche plus granulaire, contrôlable et basée sur des microservices, qui place l’efficacité au cœur de ses objectifs.

    Est-ce que vous êtes toujours là ? Toujours motivé? Alors c’est parti 🙂

    Installation de Docker

    – On update le système Debian:

    apt update

    – On installe des prérequis qui va permettre à apt d’utiliser les package en HTTPS:

    apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common lsb-release

    – On ajoute la clé GPG du dépôt Docker à APT:

    curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

    – On ajoute le dépôt stable à APT:

    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 /etc/apt/sources.list.d/docker.list > /dev/null

    – On update apt

    apt update

    – On installe Docker:

    sudo apt install docker-ce sudo apt install docker-ce docker-ce-cli containerd.io

    – On vérifie que le démon docker est bien lancé:

    systemctl status docker Utilisation basique de Docker

    – La syntaxe est la suivante:

    docker [option] [command] [arguments]

    – Pour voir toutes les commandes disponibles, taper :

    docker attach Attach local standard input, output, and error streams to a running container build Build an image from a Dockerfile commit Create a new image from a container's changes cp Copy files/folders between a container and the local filesystem create Create a new container diff Inspect changes to files or directories on a container's filesystem events Get real time events from the server exec Run a command in a running container export Export a container's filesystem as a tar archive history Show the history of an image images List images import Import the contents from a tarball to create a filesystem image info Display system-wide information inspect Return low-level information on Docker objects kill Kill one or more running containers load Load an image from a tar archive or STDIN login Log in to a Docker registry logout Log out from a Docker registry logs Fetch the logs of a container pause Pause all processes within one or more containers port List port mappings or a specific mapping for the container ps List containers pull Pull an image or a repository from a registry push Push an image or a repository to a registry rename Rename a container restart Restart one or more containers rm Remove one or more containers rmi Remove one or more images run Run a command in a new container save Save one or more images to a tar archive (streamed to STDOUT by default) search Search the Docker Hub for images start Start one or more stopped containers stats Display a live stream of container(s) resource usage statistics stop Stop one or more running containers tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE top Display the running processes of a container unpause Unpause all processes within one or more containers update Update configuration of one or more containers version Show the Docker version information wait Block until one or more containers stop, then print their exit codes

    – Pour voir les options spécifiques à une commande, taper:

    docker docker-subcommand --help

    – Pour voir les informations système de Docker :

    docker info

    – Affichez l’ensemble des conteneurs existants:

    Quand vous créez/lancez des conteneurs avec l’argument –detach, vous pouvez avoir besoin de savoir si les conteneurs sont toujours actifs, pour cela, vous devez utiliser la commande docker ps.

    docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e2da0910758b nginx "nginx -g 'daemon of…" 5 seconds ago Up 4 seconds 0.0.0.0:8080->80/tcp awesome_vaughan

    – Vous pouvez aussi voir l’ensemble des images présentes en local sur votre ordinateur, avec la commande docker images -a.

    docker images -a REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest d1165f221234 6 weeks ago 13.3kB

    Nettoyer le système docker:

    Après avoir fait de nombreux tests sur votre ordinateur, vous pouvez avoir besoin de faire un peu de ménage.
    Pour cela, vous pouvez supprimer l’ensemble des ressources manuelles dans Docker.

    rm -rf /var/lib/docker rm -rf /var/lib/containerd Ou vous pouvez laisser faire Docker pour qu’il fasse lui-même le ménage : docker system prune WARNING! This will remove: - all stopped containers - all networks not used by at least one container - all dangling images - all dangling build cache Are you sure you want to continue? [y/N] y Deleted Containers: 941b8955b4fd8988fefe2aa91c7eb501f2d4f8c56bf4718fea8ed50904104745 a96e73c623fb6530ab41db6a82aca7017d54a99590f0b45eb6bf934ef8e4d3ed Deleted Images: deleted: sha256:797a90d1aff81492851a11445989155ace5f87a05379a0fd7342da4c4516663e deleted: sha256:c5c8911bd17751bd631ad7ed00203ba2dcb79a64316e14ea95a9edeb735ca3ea Total reclaimed space: 21.08MB

    – Celle-ci va supprimer les données suivantes :

    L’ensemble des conteneurs Docker qui ne sont pas en status running ; L’ensemble des réseaux créés par Docker qui ne sont pas utilisés par au moins un conteneur ; L’ensemble des images Docker non utilisées ; L’ensemble des caches utilisés pour la création d’images Docker. Désinstaller Docker apt-get purge docker-ce docker-ce-cli containerd.io Images, containers, volumes, or customized configuration files on your host are not automatically removed. To delete all images, containers, and volumes: sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd You must delete any edited configuration files manually. Travailler avec Docker

    – On vérifie que l’installation est correcte en lançant l’image docker hello-world.
    – Si elle est présente en locale, Docker la lance sinon il la télécharge puis la lance

    docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world b8dfde127a29: Pull complete Digest: sha256:f2266cbfc127c960fd30e76b7c792dc23b588c0db76233517e1891a4e357d519 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be work**g correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/

    – On peux chercher un conteneur de la manière suivante:

    docker search nomdupackage docker search medusa NAME DESCRIPTION STARS OFFICIAL AUTOMATED linuxserver/medusa A Medusa container, brought to you by LinuxS… 74 pymedusa/medusa Automatic Video Library Manager for TV Shows. 24 [OK] lsioarmhf/medusa ARMHF based Linuxserver.io image of medusa 8 k8ssandra/medusa-operator 2 lsioarmhf/medusa-aarch64 ARM64 based Linuxserver.io image of medusa 1 k8ssandra/medusa 1 bobbysteel/medusa ** Please switch to pymedusa/medusa for auto… 1 misasa/medusa A stonegazer who keeps track specimen, box, … 0 ....

    – Pour télécharger un conteneur:

    docker pull nomduconteneur docker pull pymedusa/medusa

    – Après le téléchargement, on peux lancer le conteneur avec la commande run comme:

    docker run hello-world

    – Lister les conteneurs téléchargés:
    –> Ici, le conteneur hello-world qui se lance et qui s’arrête après un message de test.

    docker images -a REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest d1165f221234 6 weeks ago 13.3kB

    – Les conteneurs peuvent être plus utile que cela et peuvent être interactif
    Cela veux dire qu’une fois lancé, ils sont similaires à une machine virtuelle.

    – On peux lancer un conteneur de manière interactive de la manière suivante:

    La combinaison de -i et -t donne l’acçès à un Shell interactif à l’intérieur du conteneur. docker run -it ubuntu

    – Le prompt change pour montrer le fait qu’on est à l’intérieur du conteneur et prends la forme suivante:

    Output root@d9b100f2f636:/#

    – A noter que l’ID du conteneur est présent dans le prompt (d9b100f2f636).
    Il sera important de le connaitre pour pouvoir le supprimer si besoin.

    – On peux maintenant utiliser des commandes à l’intérieur de ce conteneur

    – On peux aussi lancer un conteneur l’option -d

    -d pour détacher le conteneur du processus principal de la console.
    Il vous permet de continuer à utiliser la console pendant que votre conteneur tourne sur un autre processus

    – On pourrait donc avoir besoin de “rentrer” dans votre conteneur Docker pour pouvoir y effectuer des actions.
    –> Pour cela, on devra utiliser la commande :

    docker exec -ti ID_RETOURNÉ_LORS_DU_DOCKER_RUN bash

    Dans cette commande, l’argument -ti permet d’avoir un Shell bash pleinement opérationnel.

    – Lister les conteneurs actifs:

    docker ps Output CONTAINER ID IMAGE COMMAND CREATED

    – Lister les conteneurs actifs & inactifs:

    docker ps -a Output CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d42d0bbfbd35 ubuntu "/bin/bash" About a minute ago Exited (0) 20 seconds ago friendly_volhard 0740844d024c hello-world "/hello" 3 minutes ago Exited (0) 3 minutes ago elegant_neumann

    – Lister le dernier conteneur créé:

    docker ps -l Output CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d42d0bbfbd35 ubuntu "/bin/bash" About a minute ago Exited (0) 34 se

    Démarrer un conteneur:

    docker start CONTAINER ID docker start d42d0bbfbd35

    – Le conteneur démarrer et on peux vérifier sons statuts:

    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d42d0bbfbd35 ubuntu "/bin/bash" About a minute ago Up 8 seconds

    Arrêter un conteneur:

    docker stop CONTAINER ID docker stop NAMES docker stop d42d0bbfbd35 docker stop friendly_volhard

    Supprimer un conteneur:

    docker rm CONTAINER ID docker rm NAMES docker rm elegant_neumann docker rm d42d0bbfbd35

    Redémarrer un conteneur:

    docker container restart NAME ID docker container restart CONTAINER ID docker container restart medusa

    Supprimer une image:

    docker rmi IMAGE ID docker rmi NAMES docker rmi elegant_neumann docker rmi d42d0bbfbd35

    – Copier un fichier d’un conteneur vers le host.

    docker cp <containerId>:/file/path/within/container /host/path/target $ sudo docker cp goofy_roentgen:/out_read.jpg .

    Ici goofy_roentgen est le nom du conteneur container obtenu avec la commande suivante:

    docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1b4ad9311e93 bamos/openface "/bin/bash" 33 minutes ago Up 33 minutes 0.0.0.0:8000->8000/tcp, 0.0.0.0:9000->9000/tcp goofy_roentgen

    – Vous pouvez aussi utiliser l’ID du conteneur:

    docker cp 1b4a:/out_read.jpg . Sources

    https://www.redhat.com/fr/topics/containers/what-is-docker

  • 3 Votes
    49 Messages
    4k Vues

    Pour info, crowdsec intègre maintenant des listes et des décisions dans la console web.
    En version gratuite, vous avez le droit à 3 listes non premium.

    – Exemple avec celle configurées sur le serveur de PW :

    81453422-f325-4f08-ba38-d43d12ae9a9c-image.png

    – Vos décisions s’affichent aussi maintenant dans l’onglet correspondant :

    f284b7ca-a902-409f-9737-92855149bded-image.png

    – Interface améliorée :

    f935af12-7b02-4a4f-b03d-70c4a75231dd-image.png

    – Accès à la base de donnéees IP Crowdsec Threat Intelligence :

    023ec498-040e-44c2-9414-d1da59d6c9b1-image.png

    1a449370-6f89-420c-9391-82393ab98ed9-image.png

    – La version 1.5 sortie en avril améliore nettement les performances :

    https://www.crowdsec.net/blog/increasing-performance-crowdsec-1-5

  • Voici les codes des sections films cachés sur netflix

    15
    3 Votes
    15 Messages
    337 Vues

    Cool, :thank_you: @Psyckofox

  • 2 Votes
    4 Messages
    296 Vues

    Jviens de lire le 1 et au final, jvais passer par ça !
    Mais ça attendra que je dorme un peu car je suis claqué

    Merci @Violence 🙂

  • 2 Votes
    2 Messages
    153 Vues

    j’aime bien le client lourd et le service web ^^

    perso j’ai migré tous les mots de passes, tout out sur Bitwarden, car compatible Firefox et iOS et depuis ma vie est super mieux :smile: j’ai un mot de passe fort différent pour chaque site et quand le 2FA s’impose, on vire le sms est on passe par l’appli

    par contre si quelqu’un arrive un jour à casser la protection, c’est fini, mais je doute que cela soit possible, physiquement parlant, en 2024

  • 3 Votes
    7 Messages
    175 Vues

    ℹ️ - Modification du tutoriel incluant un fake domain et un CA SAN via mkcert sinon l'application desktop est inutilisable

  • 2 Votes
    7 Messages
    2k Vues

    @Boltjam a dit dans SteamCMD: Télécharger des items du Steam Workshop (Wallpaper Engine) :

    salut j’ai besoins d’aide cela me met une erreur au moment du téléchargement de l’item , et comment obtenir l’Account_ID pour les télécharger je ne comprend pas si vous pouviez m’aidez je vous en remercie

    Bien lire et regarder les screens ici :

    @Violence a dit dans SteamCMD: Télécharger des items du Steam Workshop (Wallpaper Engine) :

    Télécharger avec SteamCMD

    – Vous êtes maintenant prêt à télécharger des fichiers. Pour se faire, utiliser la commande suivante:

    workshop_download_item Account_ID url_ID

    – Prenons l’exemple de ce fond d’écran animé pour Wallpaper Engine: https://steamcommunity.com/sharedfiles/filedetails/?id=2821407073

    –> On le télécharge de la manière suivante:

    workshop_download_item 431960 2821407073

    – Vous retrouverez les éléments téléchargés du Workshop dans votre répertoire de steamCMD dans :

    steamcmd\steamapps\workshop\content\431960

  • Ce sujet a été supprimé !

    1
    0 Votes
    1 Messages
    8 Vues
  • 5 Votes
    29 Messages
    578 Vues

    testé et adopté ! merci beaucoup @Даэдрия pour l’astuce, effectivement il semblerait que le logiciel réussisse à supprimer les appli sélectionnées (voir screenshot ci-dessous)… mais même si elles ne sont que désactivées c’est déjà excellent de ne plus les avoir dans la liste des applications du smartphone (genre Facebook dont je ne me suis jamais servi et qui encombrait pour rien) !


    (apparemment il faut cocher cette case dans les paramètres si on désire seulement désactiver les appli)

    encore merci c’est sympa !

  • 5 Votes
    14 Messages
    401 Vues

    Merci 🙂

  • 0 Votes
    19 Messages
    929 Vues

    @Mister158
    Ouin vu de cette façon 🍻 🍻 🍻

  • 6 Votes
    3 Messages
    287 Vues

    @Aerya

    Ben oui ça fonctionne il en a même plusieurs qui monte jusqu’à proche 100 mo/s et plusieurs a la fois, ça joue entre 15 mo/s et 100 mo/s 10 en même temps !!
    Super le coup de pouce !!

  • 2 Votes
    27 Messages
    2k Vues

    euh plus je dirai un nouveau système d’exploitation ne sort pas chaque année ya qu’a voir la sortie du 10 et du 11 🙂 . Bonne soirée edit d’ailleurs mnt on dirait qu’ il faut retenir certains icône ( comme copier) alors qu’ avant c’était mieux je trouve mon préféré reste le 8.1

  • 5 Votes
    7 Messages
    395 Vues

    Perso je suis en full virtualisation au boulot, je supervise avec VeeamOne. Ca marche assez bien.

  • 4 Votes
    7 Messages
    474 Vues

    Update du tutoriel car nouvelle méthode d’installation de Oh My Posh

    👇 Le tutoriel d’installation est disponible sur le wiki en suivant le lien ci-dessous :

    https://wiki.planete-warez.net/fr/informatique/microsoft/windows-Terminal

  • 7 Votes
    7 Messages
    691 Vues

    Bonsoir,

    Un super blog post de lsio qui m’a beaucoup. aidé sur l’utilisation de wireguard avec docker :
    https://www.linuxserver.io/blog/routing-docker-host-and-container-traffic-through-wireguard

    La dernière partit qui parle de la modification de la route par default des container pour utilisé le container client VPN, sans la contrainte d’utiliser l’interface réseaux de celui-ci ( comme c’est le cas avec le --network=container:xxx ) et interessante.
    Surtout pour les utilisateur de reverse comme Traefik ou SWAG ou ayant un bon nombre de containers sur la machine.

    Ce n’est pas super documenté sur le net encore, mais vraiment pratique.

  • 2 Votes
    1 Messages
    137 Vues

    Ce tutoriel est un condensé de ma propre procédure utilisée dans mon taf.

    Enjoy 😉

    Qu’est-ce que GLPI ?

    GLPI (Gestionnaire Libre de Parc Informatique) est un logiciel libre de gestion des services informatiques (ITSM) et de gestion des services d’assistance (issue tracking system et ServiceDesk). Cette solution libre est éditée en PHP et distribuée sous licence GPL.

    GLPI aide les entreprises à gérer leur système d’information. Parmi ses caractéristiques, cette solution est capable de construire un inventaire de toutes les ressources de la société et de réaliser la gestion des tâches administratives et financières. Les fonctionnalités de cette solution aident les administrateurs informatiques à créer une base de données regroupant des ressources techniques et de gestion, ainsi qu’un historique des actions de maintenance. La fonctionnalité de gestion d’assistance ou helpdesk fournit aux utilisateurs un service leur permettant de signaler des incidents ou de créer des demandes basées sur un actif ou non, ceci par la création d’un ticket d’assistance.

    👇 Le tutoriel d’installation est disponible sur le wiki en suivant le lien ci-dessous :

    https://wiki.planete-warez.net/fr/informatique/selfhosted/glpi

  • 4 Votes
    5 Messages
    307 Vues

    @duJambon a dit dans RustDesk: Héberger son propre serveur :

    Avec windows, l’installation est quasiment identique, mais la clef pose des problèmes de caractères non autorisés (il faut la générer parfois plusieurs fois (et il n’y a pas le moindre message d’erreur).

    C’est bien stipuler dans la documentation officielle et dans le tuto donc pas de surprises…

    Et oui c’est jamais o grand jamais conseillé d’héberger ce genre de service sous windows…
    Ils sont déjà bien gentils de l’implémenter…

  • 3 Votes
    2 Messages
    273 Vues