Commit 370f2dce authored by bikepunk's avatar bikepunk
Browse files

initial script by gueux

parent 9fdc52ee
#!/usr/bin/python3
import os
import shutil
import subprocess
import sys
# variables à changer:
IFNAME="enp0s25"
OPENWRT_INITRAMFS_IMAGE="openwrt-19.07.4-ar71xx-mikrotik-rb-nor-flash-16M-ac-initramfs-kernel.bin"
OPENWRT_SYSUPGRADE_IMAGE="openwrt-19.07.4-ar71xx-mikrotik-rb-nor-flash-16M-ac-squashfs-sysupgrade.bin"
# variables pas à ne pas modifier (a priori)
USER=os.environ['USER']
IP_ROUTEROS="192.168.88.1"
IP_OPENWRT="192.168.1.1"
BLUE='\033[0;34m'
RED='\033[0;31m'
NC='\033[0m'
SSH_OPT="-oStrictHostKeyChecking=no"
DNSMASQ="sudo /usr/sbin/dnsmasq --user=" + USER + " \
--no-daemon \
--listen-address 192.168.1.10 \
--bind-interfaces \
-p0 \
--dhcp-authoritative \
--dhcp-range=192.168.1.100,192.168.1.200 \
--bootp-dynamic \
--dhcp-boot=" + OPENWRT_INITRAMFS_IMAGE + " \
--log-dhcp \
--enable-tftp \
--tftp-root=$(pwd)"
print(BLUE + "Script de flash d'OpenWrt sur Mikrotik b952ui-5ac2nD" + NC)
input(RED + "Brancher le câble d'alimentation du routeur, brancher le \
câble ethernet sur le port 2 du routeur, vérifier que l'ordinateur a bien \
reçu une IP (192.168.88.X) et appuyer sur 'ENTRÉE'" + NC)
print(BLUE + "Teste si dnsmasq, ssh, sudo sont installés" + NC)
if not shutil.which("dnsmasq"): sys.exit(RED + "Installer dnsmasq et relancer le script" + NC)
if not shutil.which("ssh"): sys.exit(RED + "Installer ssh et relancer le script" + NC)
if not shutil.which("sudo"): sys.exit(RED + "Installer sudo et relancer le script" + NC)
print(BLUE + "Teste si sudo est fonctionnel" + NC)
try:
subprocess.call(['sudo', 'echo', '-n', BLUE + 'sudo OK' + NC]) or sys.exit(RED + "Configurer sudo et relancer le script" + NC)
except:
sys.exit(RED + "Configurer sudo et relancer le script" + NC)
print(BLUE + "Copie de la clé de licence key depuis le routeur" + NC)
subprocess.run("ssh " + SSH_OPT + " admin@" + IP_ROUTEROS + " \"/system license output\"", shell=True)
byteskey = subprocess.check_output("ssh" + SSH_OPT + " admin@" + IP_ROUTEROS + " \"/system license print\" | grep \"software-id:\" | sed -r 's/.*software-id: ([[:alnum:]-]+).*/\1/'.key", shell=True)
# ^ TODO: verify if "byteskey" right is the right output
key = byteskey.decode('utf-8') + ".key"
subprocess.run("scp" + SSH_OPT + " admin@" + IP_ROUTEROS + ":/" + key + "./" + key)
print(BLUE + "Configuration du routeur pour le flash" + NC)
subprocess.run("ssh" + SSH_OPT + " admin@" + IP_ROUTEROS + " \"/system routerboard settings set boot-device=try-ethernet-once-then-nand\"", shell=True)
subprocess.run("ssh" + SSH_OPT + " admin@" + IP_ROUTEROS + " \"/system routerboard settings set boot-protocol=dhcp\"", shell=True)
subprocess.run("ssh" + SSH_OPT + " admin@" + IP_ROUTEROS + " \"/system routerboard settings set force-backup-booter=yes\"", shell=True)
subprocess.run("ssh" + SSH_OPT + " admin@" + IP_ROUTEROS + " \"/system shutdown\"", shell=True)
input(RED + "Débrancher le câble d'alimentation du routeur, brancher le câble \
ethernet sur le port 1 du routeur (Internet/PoEin) et appuyer sur 'ENTRÉE'" \
+ NC)
print(BLUE + "Configuration réseau de l'ordinateur" + NC)
subprocess.run("sudo /sbin/ip addr replace 192.168.1.10/24 dev " + IFNAME, shell=True)
subprocess.run("sudo /sbin/ip link set dev " + IFNAME + " up", shell=True)
print(BLUE + "Démarrage de dnsmasq" + NC)
dnsmasqprocess = subprocess.Popen(DNSMASQ, shell=True)
input(RED + "Rebrancher le câble d'alimentation du routeur. Attendre jusqu'à \
lire 'dnsmasq-tftp: sent " + OPENWRT_INITRAMFS_IMAGE + "' puis appuyer sur \
'ENTRÉE'" + NC)
dnsmasqprocess.terminate()
input(RED + "Débrancher le câble ethernet du routeur, le brancher sur le port \
2, vérifier que l'ordinateur a bien reçu une IP (192.168.1.X) et appuyer sur \
'ENTRÉE'" + NC)
subprocess.run("scp " + SSH_OPT + " " + OPENWRT_SYSUPGRADE_IMAGE + " root@" + IP_OPENWRT + ":/tmp", shell=True)
subprocess.run("ssh " + SSH_OPT + " root@" + IP_OPENWRT + " \"sysupgrade -n /tmp/" + OPENWRT_SYSUPGRADE_IMAGE + "\"", shell=True)
print(RED + "Attendre plusieurs minutes que le flash d'OpenWrt se termine: \
toutes les LEDs de la façade du routeur vont s'éteindre, puis une LED rouge \
va s'allumer sur le port 5, puis enfin la LED du port 2 va s'allumer en vert. \
C'est terminé pour ce routeur. Au suivant!" + NC)
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment