Lister tout les paquets premier niveau
Npm
npm list -g --depth=0
Yarn
yarn global ls
ajout global
Npm
npm -g install pkg
Yarn
yarn global add pkg
npm list -g --depth=0
yarn global ls
npm -g install pkg
yarn global add pkg
L’utilisation de Docker est fortement influencer par sa plateforme hôte, il peut tourner sur une simple busybox, sur debian / ubuntu, manipuler par Kubernetes ou complétement réécrit comme sur coreos.
J’ai choisi de vous présenter CoreOs pour sa simplicité et son fort potentiel avec fleet, etcd et cette notion cloud « new age »…
J’ai pour contrainte de faire mes tests sur un Windows Server, donc pour se simplifier la vie, il nous faut un provider de machine virtuelle simple et efficace comme Virtualbox et un gestionnaire comme Vagrant.
Donc prérequis:
Optionnel mais conseillé si vous êtes sous windows:
récupérer mon fork de CoreOS-vagrant, en plus de l’original, vous aurez:
git clone https://github.com/heralight/coreos-vagrant.git
P.S.: vagrant à besoins d’internet pour récupérer les images des vms demandées, à minima lors de la première exécution.
copier les ‘*.sample’ vers ‘‘ (.x.sample étant des versions de configuration alternative suivant vos goûts et couleurs)
sync-folders.yml
vous permet de paramétrer vos partages entre votre hôte et vos instances, par samba (smb, smb2, rsync, nfs, vboxsf). le sample va créer un utilisateur windows ‘vagrant’, créer un partage pour le répertoire courant assigné à cet utilisateur.
user-data
configuration de l’instance coreos proprement dite. le sample fonctionne sans internet, active etcd2, fleet, flannel et quelques autres tips, le tout pour 3 instances.
vagrant up
La première fois, cette commande va récupérer et provisionner des instances coreos, les paramétrer et les lancer.
Dans le cas où vous utiliseriez samba, l’utilisateur vagrant sera créé, ainsi que le partage.
Des consoles vous demandent d’appliquer des changements au système hôte, c’est normal, vu que l’on crée des utilisateurs, applique des droits et crée des partages.
Cette partie asynchrone peut ne pas s’exécuter dans le bon ordre la première fois, si cela échoue => vagrant halt puis vagrant up
vagrant halt
vagrant ssh
vagrant ssh core-01
si vous modifier votre user-data et que vous voulez impacter vos instances actuelles vous pouvez
reprovisionner vos instances, ce qui aura pour effet de recopier votre user-data :
vagrant provision
puis de forcer pour l’application de ces changements sur chaque instance en executant en ssh root:
coreos-cloudinit --from-file /var/lib/coreos-vagrant/vagrantfile-user-data
ou plus simplement :
vagrant --reapply-user-data up
qui automatise la méthode 1
Ajouter ou modifier les lignes suivantes dans votre user-data.
Si l’instance existe, pensez à réappliquer cette configuration (voir plus haut).
Vous préférez un gestionnaire ubuntu pour coreos, pas de souci!
write_files: - path: "/home/core/.toolboxrc" owner: core content: |- TOOLBOX_DOCKER_IMAGE=ubuntu TOOLBOX_DOCKER_TAG=14.04
- name: docker.service drop-ins: - name: 20-http-proxy.conf content: | [Service] Environment="HTTP_PROXY=http://yourproxy:port" "HTTPS_PROXY=http://yourproxy:port" "http-proxy=http://yourproxy:port" "https-proxy=http://yourproxy:port" "NO_PROXY=localhost,127.0.0.0/8,172.17.0.0/16,.sock,yourproxy,/var/run/docker.sock" command: restart
fleet: etcd-servers: http://$private_ipv4:2379 public-ip: "$private_ipv4"
- name: fleet.service command: start
flannel: interface: "$public_ipv4"
- name: flanneld.service drop-ins: - name: 50-network-config.conf content: | [Service] ExecStartPre=/usr/bin/etcdctl set /coreos.com/network/config '{ "Network": "10.1.0.0/16" }' command: start
Cette configuration etcd fonctionne pour 3 instances sans discovery internet (sans dépendances vers discovery_url), les ips fixes sont données à titre indicatif.
Ceci vous montre indirectement comment vous passer du discovery de « https://discovery.etcd.io »
keyword : howto disable discovery etcd.
commentez ‘token = open($new_discovery_url).read’
- name: etcd.service command: start content: | Description=etcd 2.0 After=docker.service Conflicts=etcd.service [Service] User=etcd Type=notify EnvironmentFile=/etc/environment TimeoutStartSec=0 SyslogIdentifier=writer_process Environment=ETCD_DATA_DIR=/var/lib/etcd2 Environment=ETCD_NAME=%m ExecStart=/bin/bash -c "/usr/bin/etcd2 \ -name %H \ -listen-client-urls http://0.0.0.0:2379 \ -advertise-client-urls http://$COREOS_PRIVATE_IPV4:2379 \ -listen-peer-urls http://0.0.0.0:2380 \ -initial-advertise-peer-urls http://$COREOS_PRIVATE_IPV4:2380 \ -initial-cluster core-01=http://172.17.8.101:2380,core-02=http://172.17.8.102:2380,core-03=http://172.17.8.103:2380\ -initial-cluster-state new" Restart=always RestartSec=10s LimitNOFILE=40000 TimeoutStartSec=0 [Install] WantedBy=multi-user.target [X-Fleet] Conflicts=etcd*
Pour tester votre configuration etcd connectez-vous en ssh sur 2 instances, déjà vous devriez tester l’état du service etcd:
systemctl status etcd
etcdctl cluster-health
etcdctl watch /message --forever
etcdctl set /message "Salut CoreOS, jolie com!"
D’autre exemple etcd sur
Etcd Read Write ref
Comme beaucoup, je suis sous Ubuntu.
Cet OS est très bien conçu, par contre certains paquets ont quelques fois des dépendances un peu farfelues, voir qui vous bouffent des ressources inutilement.
Si comme moi, vous n’utilisez pas le bluetooth, le supprimer est difficile.
Il faudrait, entre autre, se priver de unity-desktop…
Bref, fin du Blabla…
Pour forcer la suppression d’un paquet sans désinstaller les paquets en dépendant:
$ sudo dpkg -r --force-depends package
Par exemple:
$ sudo dpkg -r --force-depends rfkill gnome-bluetooth bluez bluez-alsa gnome-orca network-manager-pptp network-manager-pptp-gnome speech-dispatcher indicator-bluetooth
Maintenant vous avez plein de paquets cassés… pas bien Alexandre!
Pour remédier à ce problème, une solution consiste à installer des paquets résolvant ces dépendances perdues, mais ces derniers seront vides, en gros des « dummy packages ».
Pour créer ces paquets, vous devrez par exemple utiliser equivs-control et equivs-build ou mon script.
La commande:
$ ./gen-dummy-package.sh --install|i [packageName]+ # Par exemple: $ ./gen-dummy-package.sh -i rfkill nome-bluetooth bluez
Le « -i » va effectuer une installation du paquet nouvellement créé.
Le script complet: