Ajouté le 06.11.2019.
J'exécute un serveur domestique avec GitLab et Mattermost installé sur CentOS 7 pour configurer un environnement de programmation à la maison (je prépare un article séparé pour cette configuration. Cela fait longtemps pour diverses raisons ...)
Diverses notifications de GitLab peuvent être vues dans Mattermost, mais à part cela, si un virus est détecté par ClamAV ou si un journal approprié peut être envoyé au canal privé de Mattermost, il sera plus facile à gérer. Gmail est enterré dans beaucoup de spam. Il semble que python dispose d'une bibliothèque appelée slackweb qui peut envoyer des messages à slack etc., donc le but final est de l'installer.
Cependant, comme je n'ai pas joué avec python sur le serveur en premier lieu, je vais créer un environnement afin que je puisse utiliser 3 systèmes au lieu de la version 2.7 par défaut de CentOS 7. Puisqu'il est dit de créer un environnement virtuel approprié pour ne pas polluer l'environnement d'origine, lorsque je l'ai googlé, l'environnement virtuel de pyenv et pipenv semblait bon, je vais donc l'essayer pour le moment.
Tout d'abord, comme d'habitude, mettez à jour l'environnement une fois avec sudo yum update
. Cette fois, GitLab est passé de 12.4.0 à 12.4.1 et la mise à jour a pris un certain temps.
Tout d'abord, installez les packages nécessaires pour pyenv.
# yum install gcc bzip2 bzip2-devel openssl openssl-devel readline readline-devel sqlite-devel tk-devel git
Puis clonez pyenv depuis github. Placé dans / usr / local / pyenv afin qu'il puisse être utilisé par tous les utilisateurs.
# git clone git://github.com/pyenv/pyenv.git /usr/local/pyenv
# cd /usr/local/pyenv
# mkdir {versions,shims} <- ,Ne mettez pas d'espace après
Téléchargez également le package pour la mise à jour pyenv.
# cd plugins/
# git clone git://github.com/pyenv/pyenv-update
Spécifiez la variable d'environnement pour pyenv et transmettez-la via le chemin.
# echo 'export PYENV_ROOT="/usr/local/pyenv"' >> /etc/profile.d/pyenv.sh
# echo 'export PATH="${PYENV_ROOT}/shims:${PYENV_ROOT}/bin:${PATH}"' >> /etc/profile.d/pyenv.sh
En outre, PATH peut être repris au moment de sudo
# visudo
Ci-dessus, modifiez la ligne avec secure_path
comme suit.
#Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
Defaults env_keep += "PATH"
Defaults env_keep += "PYENV_ROOT"
Vous pouvez maintenant utiliser pyenv car le chemin passera lorsque vous vous reconnecterez ou $ source / etc / profile.d / pyenv.sh
.
$pyenv --version
pyenv 1.2.14-11-gb5f69fe
$pyenv install --list
~Les versions de python disponibles sont décalées~
(Il est normal de suivre le chemin, mais je ne comprends pas vraiment pourquoi éditer le contenu de visudo est comme ça. Puis-je commenter sur / sbin ...?)
Puisque pip lui-même n'était pas inclus, installez-le à partir de là.
$curl https://bootstrap.pypa.io/get-pip.py | sudo python
$pip --version
pip 19.3.1 from /usr/lib/python2.7/site-packages/pip (python 2.7)
Ensuite, attendez l'installation de pipenv.
$sudo pip install pipenv
$pipenv --version
pipenv, version 2018.11.26
Dans l'état ci-dessus, pipenv peut être utilisé, et un environnement virtuel pour chaque dossier ou projet peut être créé avec pipenv --python 3.7.5
etc. dans la section suivante.
Cependant, la substance de cet environnement virtuel est créée dans ~ / .local / share / virtualenvs /
. Lorsque je me suis connecté au serveur, je voulais savoir qui s'est connecté sur Mattermost avec getpass.getuser ()
, mais comme l'entité est dans le répertoire personnel de chaque utilisateur, je veux obtenir slack web
Je n'ai pas pu le lire et j'ai lancé une erreur. Puisque la version de python était 3.7.5 pour les autres utilisateurs, il semble que l'environnement de pyenv ait été chargé, mais l'environnement de pipenv n'a pas pu être chargé.
Pour éviter cela, définissez $ PIPENV_VENV_IN_PROJECT
comme variable d'environnement. En conséquence, l'environnement virtuel réel est stocké dans le répertoire .venv
de chaque répertoire de projet.
Je veux que tous les utilisateurs connectés utilisent .venv
de chaque projet, alors ajoutez ce qui suit à la fin de / etc / bashrc
.
/etc/bashrc
# To enable local virtual enviroment for pipenv
export PIPENV_VENV_IN_PROJECT=1
Désormais, tous les utilisateurs peuvent tout gérer, des programmes aux environnements qu'ils souhaitent utiliser avec le contenu d'un seul répertoire.
Créez un dossier de projet pour vérifier le fonctionnement de slackweb, qui est la cible initiale.
$mkdir my_program
$mkdir my_program/slackweb
$cd my_program/slackweb
Spécifiez python 3.7.5 de la dernière carte de la série 3.7 comme environnement. Cependant, il semble que libffi-devel soit nécessaire pour utiliser la série 3.7 ou une version ultérieure, donc installez-la avant d'installer 3.7. (J'ai fait des allers-retours plus tard sans faire ça)
$sudo yum install libffi-devel
$sudo pyenv install 3.7.5
Maintenant que nous avons 3.7.5 via pyenv, créez un environnement virtuel pour l'utiliser dans le dossier my_program / slackweb.
$pipenv --python 3.7.5
Dans cet état, vérifiez que la version python du système et la version python de pipenv dans ce dossier sont différentes.
$python --version
Python 2.7.5
$pipenv run python --version
Python 3.7.5
Si vous gardez à l'esprit «pipenv run», vous utilisez la commande dans cet environnement. C'est bien avec une petite confirmation, mais si vous voulez entrer dans l'environnement virtuel et exécuter toutes les commandes suivantes avec python dans l'environnement virtuel, si vous voulez exécuter toutes les commandes suivantes avec python dans l'environnement virtuel, entrez dans l'environnement avec pipenv shell
. En sortant, ʻexit`.
Même si vous le faites depuis pipenv sans faire pyenv au préalable, il semble que cela se fera à partir de l'installation de python en coopération avec pyenv, mais dans ce cas, vous devez le faire avec sudo. Ensuite, l'environnement virtuel créé est susceptible d'être sous la racine (?), Donc cette fois, il est exécuté séparément.
Si vous installez pyenv uniquement pour les utilisateurs locaux et que vous ne transmettez le chemin qu'à vous-même, vous n'aurez pas besoin de sudo (?)
Enfin, installez Slack Web.
$pipenv install slackweb
Si vous faites pip list
dans un shell normal, vous pouvez voir les choses installées par pip du système, mais dans un environnement virtuel
[name@localhost slackweb]$ pipenv shell
(slackweb) [name@localhost slackweb]$ pip list
Package Version
---------- -------
pip 19.3.1
setuptools 41.6.0
slackweb 1.0.5
wheel 0.33.6
De cette manière, vous pouvez vérifier le contenu de l'environnement virtuel que vous avez créé. Voici un test pour voir si slackweb fonctionne:
(slackweb) [name@localhost slackweb]$python
Python 3.7.5 (default, Nov 3 2019, 00:13:05)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import slackweb
>>> slack = slackweb.Slack(url="Adresse de crochet Web entrant de votre Mattermost")
>>> slack.notify(text="This is a test from inside of the server.")
Place de la ville de Mattermost indique qu'il s'agit d'un test de l'intérieur du serveur. Avec cela, diverses notifications peuvent être envoyées à Mattermost à l'avenir, ce qui est pratique. Diverses choses sont susceptibles de se produire.
Nous avons préparé un programme qui avertit Mattermost lorsque le serveur se connecte réellement.
login_notification.py
import slackweb
import getpass
slack = slackweb.Slack(url="Adresse de crochet Web entrant de votre Mattermost")
attachments = []
attachment = {"title": "Login notification",
"pretext": "This is a notification from _FQDN du serveur_",
"text": "**" + getpass.getuser() + "** logged in.",
"mrkdwn_in": ["text", "pretext"]}
attachments.append(attachment)
slack.notify(channel="#Nom du canal de destination de notification",
username="CentOS 7",
attachments=attachments)
Au fait, le module getpass
est la bibliothèque par défaut pour python, vous n'avez donc pas à essayer de le mettre avec pipenv (ou plutôt, vous souffrez juste d'erreurs, de perte de temps ...). Si vous l'installez par inadvertance, un enregistrement étrange sera laissé dans le Pipfile, supprimez donc les informations inutiles avec pipenv uninstall getpass
, pipenv clean
.
Après cela, vous pouvez obtenir une notification de connexion en exécutant ceci. Faites simplement pipenv run python login_notification.py
, mais je veux que vous soyez averti automatiquement une seule fois lorsque vous vous connectez. Par conséquent, ajoutez-le à la fin de / etc / bashrc
pour que cela se produise également pour tous les utilisateurs.
/etc/bashrc
# Notify the login to mattermost
cd /home/username/my_program/slackweb/ <-nom d'utilisateur est l'utilisateur qui a créé l'environnement et le programme ci-dessus
pipenv run python login_notification.py
cd ~ <-Je ne sais pas quoi faire plus tard, je vais donc retourner à la maison de l'utilisateur connecté
Désormais, chaque fois que vous vous connectez avec ssh
ou sudo su
, vous serez notifié à Mattermost que vous vous êtes connecté en tant qu'utilisateur ou root. Mattermost peut facilement lier les notifications aux smartphones, donc même si une personne suspecte prend le relais à votre insu, vous pouvez immédiatement le remarquer.
C'est une assurance pour la tranquillité d'esprit, il est donc plus important d'empêcher la fuite de la clé privée d'accès, mais je pense qu'il est très important que les gens se sentent à l'aise.
(En ce sens, je ne suis pas du tout soulagé car je crains d'exposer par inadvertance le crochet Web ou le nom d'utilisateur lors du téléchargement de cet article)
Installer Pyenv sur CentOS et créer un environnement de développement Python 3
J'ai essayé d'utiliser Pipenv pour le développement Python
Pipenv: Flux de travail de développement Python pour les humains (pipenv officiel)