From bd3aa42726e6dbb326dfcc00346b7a2f329854dc Mon Sep 17 00:00:00 2001 From: morestar Date: Sun, 14 Jul 2019 17:12:25 +0800 Subject: [PATCH 01/12] Update install.py --- install.py | 478 +++++++++++++++++++---------------------------------- 1 file changed, 170 insertions(+), 308 deletions(-) diff --git a/install.py b/install.py index 4563e20..f155319 100644 --- a/install.py +++ b/install.py @@ -45,21 +45,17 @@ def __init__(self): self.smb_conf_path = "/etc/samba/smb.conf" self.wifi_conf_path = "/etc/wpa_supplicant/wpa_supplicant.conf" self.mosquitto_config_path = "/etc/mosquitto/mosquitto.conf" + self.docker_mirror_path = "/etc/docker/daemon.json" + self.flag = 0 # 配置wifi def set_wifi(self): - if language == 'zh_CN': - Logger.info("[INFO] 增加wifi配置,请输入你的用户名和密码...") - else: - Logger.info("[INFO] add wifi config, please input your user name and password...") + Logger.info("[INFO] 增加wifi配置,请输入你的用户名和密码...") SSID = input("SSID>") PASSWORD = input("PASSWORD>") if SSID != "": - if language == 'zh_CN': - Logger.info("[INFO] 确认你的wifi配置.(y or n)") - else: - Logger.info("[INFO] please confirm your wifi config") + Logger.info("[INFO] 确认你的wifi配置.(y or n)") confirm = input(">") if confirm == "y" or confirm == "Y": with open(self.wifi_conf_path, "w+") as f: @@ -71,225 +67,141 @@ def set_wifi(self): "\tpsk=\"" + PASSWORD + "\"\n" + "\tkey_mgmt=WPA-PSK\n" "\tpriority=1}") - if language == 'zh_CN': - Logger.info("[INFO] 配置成功!") - else: - Logger.info("[INFO] config success!") + Logger.info("[INFO] 配置成功!") elif confirm == "n" or confirm == "N": self.set_wifi() else: - if language == 'zh_CN': - Logger.warn("[WARNING] SSID不能为空") - else: - Logger.warn("[WARNING] SSID is None! Please input again") + Logger.warn("[WARNING] SSID不能为空") self.set_wifi() # 获取当前Python版本 @staticmethod def get_python_version(): - if language == 'zh_CN': - Logger.info("[INFO] Python3 版本") - else: - Logger.info("[INFO] Python3 version") + + Logger.info("[INFO] Python3 版本") code = subprocess.run("python3 -V", shell=True) if code.returncode != 0: - if language == 'zh_CN': - Logger.error("[ERROR] 未找到Python3") - else: - Logger.error("[ERROR] can't find python3") - if language == 'zh_CN': - Logger.info("[INFO] Python2 版本") - else: - Logger.info("[INFO] Python3 version") + Logger.error("[ERROR] 未找到Python3") + + Logger.info("[INFO] Python2 版本") code = subprocess.run("python -V", shell=True) if code.returncode != 0: - if language == 'zh_CN': - Logger.error("[ERROR] 未找到Python2") - else: - Logger.error("[ERROR] can't find python2") + Logger.error("[ERROR] 未找到Python2") # 获取当前HA版本 @staticmethod def get_ha_version(): code = subprocess.run("hass --version", shell=True) if code.returncode != 0: - if language == 'zh_CN': - Logger.error("[ERROR] 未安装HomeAssistant") - else: - Logger.error("[ERROR] No HomeAssistant installed") + Logger.error("[ERROR] 未安装HomeAssistant") # 换源 更换清华源 pip同步时间 5min def change_pip_source(self): code = subprocess.run("sudo mv /etc/pip.conf /etc/pip.conf.bak", shell=True) if code.returncode != 0: - if language == 'zh_CN': - Logger.error("[ERROR] 没有找到pip文件,准备建立pip文件") - else: - Logger.error("[ERROR] can't find pip file, we will create this file") + Logger.error("[ERROR] 没有找到pip文件,准备建立pip文件") + time.sleep(2) with open(self.pip_source_path, 'w+') as f: f.write("[global]\n" "index-url = https://pypi.tuna.tsinghua.edu.cn/simple") - if language == 'zh_CN': - Logger.info("[INFO] 写入pip文件成功") - else: - Logger.info("[INFO] write pip file success") + Logger.info("[INFO] 写入pip文件成功") + elif code.returncode == 0: with open(self.pip_source_path, 'w+') as f: f.write("[global]\n" "index-url = https://pypi.tuna.tsinghua.edu.cn/simple") - if language == 'zh_CN': - Logger.info("[INFO] 写入pip文件成功") - else: - Logger.info("[INFO] write pip file success") + Logger.info("[INFO] 写入pip文件成功") def change_apt_source(self): code = subprocess.run("sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak", shell=True) if code.returncode != 0: - if language == 'zh_CN': - Logger.error("[INFO] 找不到apt文件,准备建立apt文件") - else: - Logger.info("[INFO] can't find apt file, we will create apt file") + Logger.error("[INFO] 找不到apt文件,准备建立apt文件") time.sleep(2) with open(self.apt_source_path, 'w+') as f: f.write("deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main non-free contrib\n" "deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main non-free contrib") - if language == 'zh_CN': - Logger.info("[INFO] 写入apt文件成功") - else: - Logger.info("[INFO] write apt file success") + Logger.info("[INFO] 写入apt文件成功") + elif code.returncode == 0: with open(self.apt_source_path, 'w+') as f: f.write("deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main non-free contrib\n" "deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main non-free contrib") - if language == 'zh_CN': - Logger.info("[INFO] 写入apt文件成功") - else: - Logger.info("[INFO] write apt file success") + Logger.info("[INFO] 写入apt文件成功") + self.prepare() # 更新源与软件 def prepare(self): - if language == 'zh_CN': - Logger.info("[INFO] 准备更新软件包列表") - else: - Logger.info("[INFO] Prepare update software list") + Logger.info("[INFO] 准备更新软件包列表") + code = subprocess.run("sudo apt-get update", shell=True) if code.returncode != 0: - if language == 'zh_CN': - Logger.error("[ERROR] 更新软件包列表失败,请检查网络连接,两秒后准备重新更新") - else: - Logger.info("[ERROR] update software list fail, please check the internet, we will prepare " - "to start this job after 2 seconds") + Logger.error("[ERROR] 更新软件包列表失败,请检查网络连接,两秒后准备重新更新") time.sleep(2) self.prepare() elif code.returncode == 0: - if language == 'zh_CN': - Logger.info("[INFO] 软件包列表更新完毕") - Logger.info("\n") - Logger.info("[INFO] 是否更新软件?(y or n)") - else: - Logger.info("[INFO] software list is already update") - Logger.info("\n") - Logger.info("[INFO] will you want to upgrade the software?(y or n)") - confirm = input(">") + Logger.info("[INFO] 软件包列表更新完毕") + Logger.info("\n") + Logger.info("[INFO] 是否更新软件?(y or n) 默认为n") + + confirm = input("(不输入可直接回车使用默认值)>") if confirm == "y" or confirm == "Y": code = subprocess.run("sudo apt-get upgrade", shell=True) if code.returncode != 0: - if language == 'zh_CN': - Logger.error("[ERROR] 更新软件失败,请检查网络连接") - else: - Logger.error("[ERROR] Update software failed, please check network connection") + Logger.error("[ERROR] 更新软件失败,请检查网络连接") else: - if language == 'zh_CN': - Logger.info("[INFO] 更新软件完毕") - else: - Logger.info("[INFO] Update software completed") - elif confirm == "n" or confirm == "N": - pass + Logger.info("[INFO] 更新软件完毕") else: pass # 更新HomeAssistant def upgrade_ha(self): - if language == 'zh_CN': - Logger.info("[INFO] 准备更新HomeAssistant") - else: - Logger.info("[INFO] Prepare upgrade HomeAssistant") + Logger.info("[INFO] 准备更新HomeAssistant") + code = subprocess.run("sudo pip3 install -U homeassistant", shell=True) if code.returncode != 0: - if language == 'zh_CN': - Logger.error("[ERROR] 更新HomeAssistant失败,请检查网络, 两秒后准备重新安装...") - else: - Logger.error("[ERROR] Updating HomeAssistant failed. Please check the network and prepare " - "for reinstallation in two seconds....") + Logger.error("[ERROR] 更新HomeAssistant失败,请检查网络, 两秒后准备重新安装...") time.sleep(2) self.upgrade_ha() # 更新指定版本HA def upgrade_specific_ha(self): - if language == 'zh_CN': - Logger.info("[INFO] 请输入HA版本号") - else: - Logger.info("[INFO] Please enter HA version number") + Logger.info("[INFO] 请输入HA版本号") + ha_version = input(">") code = subprocess.run("sudo pip3 install -U homeassistant=={}".format(ha_version), shell=True) if code.returncode != 0: - if language == 'zh_CN': - Logger.error("[ERROR] 安装{}版本HomeAssistant失败,请检查版本号与网络连接," - "两秒后准备重新安装...".format(ha_version)) - else: - Logger.error("[ERROR] Installation of {} version HomeAssistant failed. " - "Please check the version number for " - "network connection and prepare for reinstallation in two seconds....".format(ha_version)) + Logger.error("[ERROR] 安装{}版本HomeAssistant失败,请检查版本号与网络连接," + "两秒后准备重新安装...".format(ha_version)) time.sleep(2) self.upgrade_specific_ha() elif code.returncode == 0: - if language == 'zh_CN': - Logger.info("[INFO] 安装{}版本HomeAssistant成功".format(ha_version)) - else: - Logger.info("[INFO] Installation of {} version HomeAssistant succeed.".format(ha_version)) + Logger.info("[INFO] 安装{}版本HomeAssistant成功".format(ha_version)) # 安装HomeAssistant def install_ha(self): - if language == 'zh_CN': - Logger.info("[INFO] 开始安装HomeAssistant") - else: - Logger.info("[INFO] Start installation HomeAssistant") + Logger.info("[INFO] 开始安装HomeAssistant") code = subprocess.run("sudo pip3 install homeassistant", shell=True) if code.returncode != 0: - if language == 'zh_CN': - Logger.error("[ERROR] 安装HomeAssistant失败,请检查网络连接,两秒后准备重新安装") - else: - Logger.error("[ERROR] Installation HomeAssistant failed. " - "Please check the version number for " - "network connection and prepare for reinstallation in two seconds....") + Logger.error("[ERROR] 安装HomeAssistant失败,请检查网络连接,两秒后准备重新安装") time.sleep(2) self.install_ha() elif code.returncode == 0: self.start_ha() self.ha_auto_start() # 安装完成后提示用户是否打印HA运行日志 - if language == 'zh_CN': - confirm = input("是否查看HomeAssistant日志?(y or n)..") - if confirm == "y" or confirm == "Y": - self.print_ha_log() - elif confirm == "n" or confirm == "n": - pass + confirm = input("是否查看HomeAssistant日志?(y or n)..") + if confirm == "y" or confirm == "Y": + self.print_ha_log() else: - confirm = input("Do you want to see HomeAssistant log?(y or n)..") - if confirm == "y" or confirm == "Y": - self.print_ha_log() - elif confirm == "n" or confirm == "n": - pass + pass # HA 自启动 def ha_auto_start(self): - if language == 'zh_CN': - Logger.info("[INFO] 准备配置HomeAssistant自启动") - else: - Logger.info("[INFO] Prepare to configure HomeAssistant self-startup") + Logger.info("[INFO] 准备配置HomeAssistant自启动") + try: with open(self.auto_start_conf_add, "w+") as f: f.write("[Unit]\n" @@ -301,22 +213,14 @@ def ha_auto_start(self): "ExecStart=/usr/local/bin/hass\n\n" "[Install]\n" "WantedBy=multi-user.target\n") - if language == 'zh_CN': - Logger.info("[INFO] HomeAssistant自启动建立成功") - else: - Logger.info("[INFO] HomeAssistant Self-Start Establishment Successful") + Logger.info("[INFO] HomeAssistant自启动建立成功") except FileNotFoundError: - if language == 'zh_CN': - Logger.error("[ERROR] 自启动建立失败,请检查自启动配置路径.") - else: - Logger.error("[ERROR] Self-startup setup failed. Check the self-startup configuration path.") + Logger.error("[ERROR] 自启动建立失败,请检查自启动配置路径.") # samba安装 TODO def install_samba(self): - if language == 'zh_CN': - Logger.info("[INFO] 准备安装Samba") - else: - Logger.info("[INFO] Prepare to install Samba") + Logger.info("[INFO] 准备安装Samba") + subprocess.run("sudo apt-get install samba samba-common", shell=True) subprocess.run("sudo smbpasswd -a pi", shell=True) subprocess.run("sudo rm " + self.smb_conf_path, shell=True) @@ -344,21 +248,17 @@ def install_samba(self): "force directory mode = 0777\n" "hosts allow =\n") subprocess.run("sudo systemctl restart smbd", shell=True) + Logger.info("[INFO] 安装Samba成功") # 安装 mosquitto def install_mosquitto(self): - if language == 'zh_CN': - Logger.info("[INFO] 准备安装Mosquitto`") - else: - Logger.info("[INFO] Prepare to install Mosquitto") + Logger.info("[INFO] 准备安装Mosquitto") + self.prepare() code = subprocess.run("sudo apt-get install mosquitto", shell=True) if code.returncode != 0: - if language == 'zh_CN': - Logger.error("[ERROR] 安装mosquitto失败,请检查网络连接,两秒后准备重新安装") - else: - Logger.error("[ERROR] Installation of mosquitto failed. Please check the network " - "connection and prepare for reinstallation in two seconds") + Logger.error("[ERROR] 安装mosquitto失败,请检查网络连接,两秒后准备重新安装") + time.sleep(2) self.install_mosquitto() elif code.returncode == 0: @@ -367,182 +267,171 @@ def install_mosquitto(self): f.write("allow_anonymous false\n" "password_file /etc/mosquitto/pwfile\n" "listener 1883\n") - if language == 'zh_CN': - Logger.info("[INFO] 写入MQTT配置成功!") - else: - Logger.info("[INFO] Write MQTT Configuration Successful!") + Logger.info("[INFO] 写入MQTT配置成功!") + except FileNotFoundError: - if language == 'zh_CN': - Logger.error("[ERROR] MQTT configuration could not be found. Check the path.") - else: - Logger.error("[ERROR] ") - if language == 'zh_CN': - mqtt_user_name = input("请输入MQTT用户名:") - else: - mqtt_user_name = input("Please input mqtt user name:") + Logger.error("[ERROR] 未发现mqtt配置文件,请重新安装...") + + mqtt_user_name = input("请输入MQTT用户名:") + subprocess.run("sudo mosquitto_passwd -c /etc/mosquitto/pwfile {}".format(mqtt_user_name), shell=True) subprocess.run("sudo systemctl start mosquitto.service", shell=True) + Logger.info("[INFO] MQTT安装配置成功") # 重启HA @staticmethod def restart_ha(): code = subprocess.run("sudo systemctl restart home-assistant@pi", shell=True) if code.returncode != 0: - if language == 'zh_CN': - Logger.error("[ERROR] 重启HomeAssistant失败") - else: - Logger.error("[ERROR] restart HomeAssistant filed") + Logger.error("[ERROR] 重启HomeAssistant失败") else: - if language == 'zh_CN': - Logger.info("[INFO] 重启HomeAssistant成功") - else: - Logger.info('[INFO] restart HomeAssistant success') + Logger.info("[INFO] 重启HomeAssistant成功") @staticmethod def start_ha(): code = subprocess.run("sudo systemctl start home-assistant@pi", shell=True) if code.returncode != 0: - if language == 'zh_CN': - Logger.error("[ERROR] 启动HomeAssistant失败") - else: - Logger.error("[ERROR] start HomeAssistant filed") + Logger.error("[ERROR] 启动HomeAssistant失败") else: - if language == 'zh_CN': - Logger.info("[INFO] 启动HomeAssistant成功") - else: - Logger.info('[INFO] start HomeAssistant success') + Logger.info("[INFO] 启动HomeAssistant成功") @staticmethod def stop_ha(): code = subprocess.run("sudo systemctl stop home-assistant@pi", shell=True) if code.returncode != 0: - if language == 'zh_CN': - Logger.error("[ERROR] 停止HomeAssistant失败") - else: - Logger.error("[ERROR] stop HomeAssistant filed") + Logger.error("[ERROR] 停止HomeAssistant失败") else: - if language == 'zh_CN': - Logger.info("[INFO] 停止HomeAssistant成功") - else: - Logger.info('[INFO] stop HomeAssistant success') + Logger.info("[INFO] 停止HomeAssistant成功") # 查看log @staticmethod def print_ha_log(): code = subprocess.run("sudo journalctl -f -u home-assistant@pi", shell=True) if code.returncode != 0: - if language == 'zh_CN': - Logger.error("[ERROR] 查看HomeAssistant日志失败") - else: - Logger.error("[ERROR] view HomeAssistant log file filed") + Logger.error("[ERROR] 查看HomeAssistant日志失败") else: - if language == 'zh_CN': - Logger.info("[INFO] 查看HomeAssistant日志成功") - else: - Logger.info('[INFO] view HomeAssistant log file success') + Logger.info("[INFO] 查看HomeAssistant日志成功") + # 更新Python3版本 def upgrade_python(self): base_dir = os.path.abspath(os.path.dirname(__file__)) pv = 'Python-3.7.2' - if language == 'zh_CN': - Logger.info("[INFO] 准备安装{}".format(pv)) - else: - Logger.info("[INFO] Prepare to install Samba") + Logger.info("[INFO] 准备安装{}".format(pv)) - if language == 'zh_CN': - Logger.info("[INFO] 准备卸载冲突, 如果有请选择y") - else: - Logger.info("[INFO] Ready to update Python 3") - Logger.info("[INFO] Preparing for Unloading Conflict") + Logger.info("[INFO] 准备卸载冲突, 如果有请选择y") code = subprocess.run("sudo pip3 uninstall homeassistant", shell=True) if code.returncode != 0: pass - if language == 'zh_CN': - Logger.info("[INFO] 开始安装依赖") - else: - Logger.info("[INFO] Start installing dependencies") + Logger.info("[INFO] 开始安装依赖") + time.sleep(2) code = subprocess.run("sudo apt-get install build-essential libsqlite3-dev sqlite3 bzip2 libbz2-dev", shell=True) if code.returncode != 0: - if language == 'zh_CN': - Logger.error("[ERROR] 安装依赖失败,请检查网络连接,两秒后准备重新安装") - else: - Logger.error("[ERROR] Installation dependency failed. Please check the network connection " - "and prepare for reinstallation in two seconds.") + Logger.error("[ERROR] 安装依赖失败,请检查网络连接,两秒后准备重新安装") time.sleep(2) self.upgrade_python() elif code.returncode == 0: code = subprocess.run("sudo apt-get install wget", shell=True) if code.returncode != 0: - if language == 'zh_CN': - Logger.error("[ERROR] 下载wget失败,请检查网络连接,两秒后准备重新安装") - else: - Logger.error("[ERROR] The download of wget failed. Please check the network connection and " - "prepare for reinstallation in two seconds.") + Logger.error("[ERROR] 下载wget失败,请检查网络连接,两秒后准备重新安装") time.sleep(2) self.prepare() elif code.returncode == 0: file_dir = base_dir + '/'.format(pv) + '.tgz' file = Path(file_dir) if file.is_file(): - if language == 'zh_CN': - Logger.info("[INFO] 开始解压安装包") - else: - Logger.info("[INFO] Start decompressing the installation package") + Logger.info("[INFO] 开始解压安装包") time.sleep(2) subprocess.run("sudo tar -zvxf {}.tgz".format(pv), shell=True) os.chdir("{}/{}".format(base_dir, pv)) - if language == 'zh_CN': - Logger.info("[INFO] 开始编译{}".format(pv)) - else: - Logger.info("[INFO] Start compiling Python") + Logger.info("[INFO] 开始编译{}".format(pv)) time.sleep(2) subprocess.run("sudo ./configure && sudo make && sudo make install", shell=True) - if language == 'zh_CN': - Logger.info("[INFO] 已完成{}安装".format(pv)) - else: - Logger.info("[INFO] {} installation completed".format(pv)) + Logger.info("[INFO] 已完成{}安装".format(pv)) else: - if language == 'zh_CN': - Logger.info("[INFO] 下载Python安装包") - else: - Logger.info("[INFO] Download the Python installation package") + Logger.info("[INFO] 下载Python安装包") time.sleep(2) code = subprocess.run("sudo wget https://www.python.org/ftp/python/3.7.2/{}.tgz".format(pv), shell=True) if code.returncode != 0: - if language == 'zh_CN': - Logger.error("[ERROR] 下载Python失败,请检查网络连接,两秒后准备重新安装") - else: - Logger.error("[ERROR] Download Python failed. Please check your network connection and " - "prepare to reinstall it in two seconds.") + Logger.error("[ERROR] 下载Python失败,请检查网络连接,两秒后准备重新安装") time.sleep(2) self.upgrade_python() elif code.returncode == 0: - if language == 'zh_CN': - Logger.info("[INFO] 开始解压安装包") - else: - Logger.info("[INFO] Start decompressing the installation package") + Logger.info("[INFO] 开始解压安装包") time.sleep(2) subprocess.run("sudo tar -zvxf {}.tgz".format(pv), shell=True) os.chdir("{}/{}".format(base_dir, pv)) - if language == 'zh_CN': - Logger.info("[INFO] 开始编译{}".format(pv)) - else: - Logger.info("[INFO] Start compiling Python") + Logger.info("[INFO] 开始编译{}".format(pv)) time.sleep(2) subprocess.run("sudo ./configure && sudo make && sudo make install", shell=True) - if language == 'zh_CN': - Logger.info("[INFO] 已完成{}安装".format(pv)) - else: - Logger.info("[INFO] {} installation completed".format(pv)) + Logger.info("[INFO] 已完成{}安装".format(pv)) + Logger.info("\n") # os.remove(pv + '.tgz') self.get_python_version() + # 安装docker ce + def install_docker(self): + + Logger.info("[INFO] 准备安装docker CE") + if self.flag == 0: + self.prepare() + self.flag = 1 + Logger.info("[INFO] 准备安装docker CE依赖") + code = subprocess.run("sudo apt-get install apt-transport-https ca-certificates" + "gnupg2 lsb-release software-properties-common", shell=True) + if code.returncode != 0: + Logger.error("[ERROR] 安装依赖失败,2s后准备重新安装...") + time.sleep(2) + self.install_docker() + else: + Logger.info("[INFO] 准备添加GPG秘钥") + code = subprocess.run("curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/raspbian/gpg | sudo apt-key " + "add -", shell=True) + if code.returncode != 0: + Logger.error("[ERROR] 添加秘钥失败,2s后准备重新添加") + time.sleep(2) + self.install_docker() + else: + Logger.info("[INFO] 准备添加国内镜像源") + code = subprocess.run("sudo add-apt-repository \"deb [arch=armhf] https://mirrors.ustc.edu.cn" + "/docker-ce/linux/raspbian $(lsb_release -cs) stable\"") + if code.returncode != 0: + Logger.error("[ERROR] 添加国内镜像源失败,尝试添加官方镜像源") + # TODO: 国外镜像失败处理 + subprocess.run("sudo add-apt-repository \"deb [arch=armhf] https://download.docker.com" + "/linux/raspbian $(lsb_release -cs) stable\"", shell=True) + else: + Logger.info("[INFO] 国内镜像添加成功") + self.prepare() + # TODO: 安装docker ce + code = subprocess.run("sudo apt-get install docker-ce", shell=True) + if code.returncode != 0: + Logger.error("[ERROR] docker CE安装失败,准备重新安装...") + self.install_docker() + else: + Logger.info("[INFO] 准备建立用户组") + # 建立docker 用户组 + subprocess.run("sudo groupadd docker", shell=True) + # 当前用户加入用户组 + subprocess.run("sudo usermod -aG docker $USER", shell=True) + # 测试docker是否安装成功 + Logger.info("[INFO] 验证docker是否安装成功") + subprocess.run("docker run arm32v7/hello-world", shell=True) + Logger.info("[INFO] 准备启动docker CE") + subprocess.run("sudo systemctl enable docker", shell=True) + subprocess.run("sudo systemctl start docker", shell=True) + # Logger.info("[INFO] 配置镜像加速器") + # with open(self.docker_mirror_path, "w+") as f: + # f.write() + + + + class Install: try: @@ -551,48 +440,27 @@ class Install: service = Service() for opt, value in opts: if opt == "-h" or opt == "--help": - if language == 'zh_CN': - Logger.info("-h 显示帮助") - Logger.info("-w 添加wifi配置") - Logger.info("-p 更新软件包列表与软件") - Logger.info("-s 安装samba服务") - Logger.info("--im 安装mosquitto") - Logger.info("-" * 20) - Logger.info("--cps 更换pip源") - Logger.info("--cas 更换apt源") - Logger.info("-" * 20) - Logger.info("--ih 安装HomeAssistant") - Logger.info("--uh 更新HomeAssistant") - Logger.info("--has 配置HomeAssistant自启动") - Logger.info("--sh 运行HomeAssistant实例") - Logger.info("--sth 停止HomeAssistant实例") - Logger.info("--rh 重启HomeAssistant") - Logger.info("--phl 查看HomeAssistant日志") - Logger.info("--hv 查看HomeAssistant版本") - Logger.info("-" * 20) - Logger.info("--pv 查看Python版本") - Logger.info("--up 更新Python3版本") - else: - Logger.info("-h get help info") - Logger.info("-w add wifi config") - Logger.info("-p Updating Package List and Software") - Logger.info("-s Installing Samba services") - Logger.info("--im Installing mosquitto services") - Logger.info("-" * 20) - Logger.info("--cps change pip source") - Logger.info("--cas change apt source") - Logger.info("-" * 20) - Logger.info("--ih install HomeAssistant") - Logger.info("--uh upgrade HomeAssistant") - Logger.info("--has set HomeAssistant auto start") - Logger.info("--sh run HomeAssistant") - Logger.info("--sth stop HomeAssistant") - Logger.info("--rh restart HomeAssistant") - Logger.info("--phl get HomeAssistant log") - Logger.info("--hv get HomeAssistant version") - Logger.info("-" * 20) - Logger.info("--pv get Python version") - Logger.info("--up upgrade Python3 version") + Logger.info("-h 显示帮助") + Logger.info("-w 添加wifi配置") + Logger.info("-p 更新软件包列表与软件") + Logger.info("-s 安装samba服务") + Logger.info("--im 安装mosquitto") + Logger.info("-" * 20) + Logger.info("--cps 更换pip源") + Logger.info("--cas 更换apt源") + Logger.info("-" * 20) + Logger.info("--ih 安装HomeAssistant") + Logger.info("--uh 更新HomeAssistant") + Logger.info("--has 配置HomeAssistant自启动") + Logger.info("--sh 运行HomeAssistant实例") + Logger.info("--sth 停止HomeAssistant实例") + Logger.info("--rh 重启HomeAssistant") + Logger.info("--phl 查看HomeAssistant日志") + Logger.info("--hv 查看HomeAssistant版本") + Logger.info("-" * 20) + Logger.info("--pv 查看Python版本") + Logger.info("--up 更新Python3版本") + elif opt == "-w": service.set_wifi() elif opt == "-p": @@ -628,17 +496,11 @@ class Install: elif opt == "--sth": service.stop_ha() except getopt.GetoptError: - if language == 'zh_CN': - Logger.error("[ERROR] 没有这个选项, 请使用-h或--help查看可用选项") - else: - Logger.error("[ERROR] Without this option, use -h or --help to view available options") + Logger.error("[ERROR] 没有这个选项, 请使用-h或--help查看可用选项") if __name__ == '__main__': try: Install() except PermissionError: - if language == 'zh_CN': - Logger.error("[ERROR] 权限不足,请使用sudo权限运行此程序") - else: - Logger.error("[ERROR] Insufficient privileges, use sudo privileges to run this program") + Logger.error("[ERROR] 权限不足,请使用sudo权限运行此程序") From d0e2d12d7e77ef9b564662b4907c2e80a310d089 Mon Sep 17 00:00:00 2001 From: morestar Date: Sun, 14 Jul 2019 17:13:18 +0800 Subject: [PATCH 02/12] Update install.py --- install.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/install.py b/install.py index f155319..1febb8e 100644 --- a/install.py +++ b/install.py @@ -430,13 +430,10 @@ def install_docker(self): # f.write() - - - class Install: try: opts, args = getopt.getopt(sys.argv[1:], "-w-p-s-h", ["help", "pv", "hv", "cps", "cas", "uh", "ih", "has", "im", - "rh", "phl", "up", "ush", "sh", "sth"]) + "rh", "phl", "up", "ush", "sh", "sth", "id"]) service = Service() for opt, value in opts: if opt == "-h" or opt == "--help": @@ -495,6 +492,8 @@ class Install: service.start_ha() elif opt == "--sth": service.stop_ha() + elif opt == "--id": + service.install_docker() except getopt.GetoptError: Logger.error("[ERROR] 没有这个选项, 请使用-h或--help查看可用选项") From 53682848b6d2947ddce2ffafc8eb8dd47fe2a456 Mon Sep 17 00:00:00 2001 From: morestar Date: Sun, 14 Jul 2019 17:14:50 +0800 Subject: [PATCH 03/12] Update README.md --- README.md | 50 ++------------------------------------------------ 1 file changed, 2 insertions(+), 48 deletions(-) diff --git a/README.md b/README.md index 368ab8e..b294425 100644 --- a/README.md +++ b/README.md @@ -1,56 +1,10 @@ -# Raspberry Pi Service Install Script - -## Installation - From curl: - - `sudo curl -O https://raw.githubusercontent.com/morestart/RaspbianInstallScript/master/install.py` - -## Documentation - -`-h` get help info - -`-w` add wifi config - -`-p` Updating Package List and Software - -`-s` Installing Samba services - -`--im` Installing mosquitto services - --------------------- -`--cps` change pip source - -`--cas` change apt source - --------------------- -`--ih` install HomeAssistant - -`--uh` upgrade HomeAssistant - -`--has` set HomeAssistant auto start - -`--sh` run HomeAssistant - -`--sth` stop HomeAssistant - -`--rh` restart HomeAssistant - -`--phl` get HomeAssistant log - -`--hv` get HomeAssistant version - --------------------- -`--pv` get Python version - -`--up` upgrade Python3 version - - +# Debian Service Install Script ## 使用说明 执行以下命令下载程序 -`sudo curl -O https://raw.githubusercontent.com/morestart/RaspbianInstallScript/master/install.py` +`sudo curl -O https://raw.githubusercontent.com/morestart/RaspbianInstallScript/chinese/install.py` ## 参数说明 - `-w` 添加wifi配置 - `-p` 更新软件包列表与软件 From e246c62aecc2db89f1155aeec77853abd7e73535 Mon Sep 17 00:00:00 2001 From: morestar Date: Sun, 14 Jul 2019 17:16:40 +0800 Subject: [PATCH 04/12] Update install.py --- install.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/install.py b/install.py index 1febb8e..f6efe88 100644 --- a/install.py +++ b/install.py @@ -2,12 +2,9 @@ import subprocess import sys import time -import locale import os from pathlib import Path -language = locale.getdefaultlocale()[0] - class Logger: OKBLUE = '\033[94m' @@ -442,10 +439,10 @@ class Install: Logger.info("-p 更新软件包列表与软件") Logger.info("-s 安装samba服务") Logger.info("--im 安装mosquitto") - Logger.info("-" * 20) + Logger.info("-" * 30) Logger.info("--cps 更换pip源") Logger.info("--cas 更换apt源") - Logger.info("-" * 20) + Logger.info("-" * 30) Logger.info("--ih 安装HomeAssistant") Logger.info("--uh 更新HomeAssistant") Logger.info("--has 配置HomeAssistant自启动") @@ -454,9 +451,11 @@ class Install: Logger.info("--rh 重启HomeAssistant") Logger.info("--phl 查看HomeAssistant日志") Logger.info("--hv 查看HomeAssistant版本") - Logger.info("-" * 20) + Logger.info("-" * 30) Logger.info("--pv 查看Python版本") Logger.info("--up 更新Python3版本") + Logger.info("-" * 30) + Logger.info("--id 安装docker CE") elif opt == "-w": service.set_wifi() From 88d33241fd2fe9c438e9dfaf13049dbae0d7911b Mon Sep 17 00:00:00 2001 From: morestar Date: Sun, 14 Jul 2019 17:18:06 +0800 Subject: [PATCH 05/12] Update install.py --- install.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.py b/install.py index f6efe88..c49112a 100644 --- a/install.py +++ b/install.py @@ -379,7 +379,7 @@ def install_docker(self): self.prepare() self.flag = 1 Logger.info("[INFO] 准备安装docker CE依赖") - code = subprocess.run("sudo apt-get install apt-transport-https ca-certificates" + code = subprocess.run("sudo apt-get install apt-transport-https ca-certificates " "gnupg2 lsb-release software-properties-common", shell=True) if code.returncode != 0: Logger.error("[ERROR] 安装依赖失败,2s后准备重新安装...") From 5677730e62eb53c8c6bba81c76e8045495b8231e Mon Sep 17 00:00:00 2001 From: morestar Date: Sun, 14 Jul 2019 17:22:18 +0800 Subject: [PATCH 06/12] Update install.py --- install.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/install.py b/install.py index c49112a..360628f 100644 --- a/install.py +++ b/install.py @@ -379,8 +379,7 @@ def install_docker(self): self.prepare() self.flag = 1 Logger.info("[INFO] 准备安装docker CE依赖") - code = subprocess.run("sudo apt-get install apt-transport-https ca-certificates " - "gnupg2 lsb-release software-properties-common", shell=True) + code = subprocess.run("sudo apt-get install apt-transport-https ca-certificates gnupg2 lsb-release software-properties-common", shell=True) if code.returncode != 0: Logger.error("[ERROR] 安装依赖失败,2s后准备重新安装...") time.sleep(2) From 9cf116fbd449cfa74259f2a396dbfb38a4be014f Mon Sep 17 00:00:00 2001 From: morestar Date: Sun, 14 Jul 2019 18:01:29 +0800 Subject: [PATCH 07/12] Update install.py --- install.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/install.py b/install.py index 360628f..472bd44 100644 --- a/install.py +++ b/install.py @@ -394,8 +394,10 @@ def install_docker(self): self.install_docker() else: Logger.info("[INFO] 准备添加国内镜像源") - code = subprocess.run("sudo add-apt-repository \"deb [arch=armhf] https://mirrors.ustc.edu.cn" - "/docker-ce/linux/raspbian $(lsb_release -cs) stable\"") + code = subprocess.run("sudo add-apt-repository \ + \"deb [arch=armhf] https://mirrors.ustc.edu.cn/docker-ce/linux/raspbian \ + $(lsb_release -cs) \ + stable\"") if code.returncode != 0: Logger.error("[ERROR] 添加国内镜像源失败,尝试添加官方镜像源") # TODO: 国外镜像失败处理 From 83e1a493bf08e0e11949b376c3e03f84a8071db9 Mon Sep 17 00:00:00 2001 From: morestar Date: Sun, 14 Jul 2019 18:08:58 +0800 Subject: [PATCH 08/12] Update install.py --- install.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/install.py b/install.py index 472bd44..3276a40 100644 --- a/install.py +++ b/install.py @@ -394,10 +394,7 @@ def install_docker(self): self.install_docker() else: Logger.info("[INFO] 准备添加国内镜像源") - code = subprocess.run("sudo add-apt-repository \ - \"deb [arch=armhf] https://mirrors.ustc.edu.cn/docker-ce/linux/raspbian \ - $(lsb_release -cs) \ - stable\"") + code = subprocess.run("sudo add-apt-repository \"deb [arch=armhf] https://mirrors.ustc.edu.cn/docker-ce/linux/raspbian $(lsb_release -cs) stable\"") if code.returncode != 0: Logger.error("[ERROR] 添加国内镜像源失败,尝试添加官方镜像源") # TODO: 国外镜像失败处理 From a7a0553f08d7dbc295b1ec9a628637ab2da88024 Mon Sep 17 00:00:00 2001 From: morestar Date: Sun, 14 Jul 2019 18:12:50 +0800 Subject: [PATCH 09/12] Update install.py --- install.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/install.py b/install.py index 3276a40..8ea3b50 100644 --- a/install.py +++ b/install.py @@ -394,14 +394,14 @@ def install_docker(self): self.install_docker() else: Logger.info("[INFO] 准备添加国内镜像源") - code = subprocess.run("sudo add-apt-repository \"deb [arch=armhf] https://mirrors.ustc.edu.cn/docker-ce/linux/raspbian $(lsb_release -cs) stable\"") - if code.returncode != 0: - Logger.error("[ERROR] 添加国内镜像源失败,尝试添加官方镜像源") - # TODO: 国外镜像失败处理 - subprocess.run("sudo add-apt-repository \"deb [arch=armhf] https://download.docker.com" - "/linux/raspbian $(lsb_release -cs) stable\"", shell=True) - else: - Logger.info("[INFO] 国内镜像添加成功") + # code = subprocess.run("sudo add-apt-repository \"deb [arch=armhf] https://mirrors.ustc.edu.cn/docker-ce/linux/raspbian $(lsb_release -cs) stable\"") + # if code.returncode != 0: + # Logger.error("[ERROR] 添加国内镜像源失败,尝试添加官方镜像源") + # # TODO: 国外镜像失败处理 + # subprocess.run("sudo add-apt-repository \"deb [arch=armhf] https://download.docker.com" + # "/linux/raspbian $(lsb_release -cs) stable\"", shell=True) + # else: + # Logger.info("[INFO] 国内镜像添加成功") self.prepare() # TODO: 安装docker ce code = subprocess.run("sudo apt-get install docker-ce", shell=True) From 7474bd1995e4f9656b9b9ef5e75abdcf58913ccb Mon Sep 17 00:00:00 2001 From: morestar Date: Sun, 14 Jul 2019 18:18:10 +0800 Subject: [PATCH 10/12] Update install.py --- install.py | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/install.py b/install.py index 8ea3b50..9a0130d 100644 --- a/install.py +++ b/install.py @@ -394,14 +394,8 @@ def install_docker(self): self.install_docker() else: Logger.info("[INFO] 准备添加国内镜像源") - # code = subprocess.run("sudo add-apt-repository \"deb [arch=armhf] https://mirrors.ustc.edu.cn/docker-ce/linux/raspbian $(lsb_release -cs) stable\"") - # if code.returncode != 0: - # Logger.error("[ERROR] 添加国内镜像源失败,尝试添加官方镜像源") - # # TODO: 国外镜像失败处理 - # subprocess.run("sudo add-apt-repository \"deb [arch=armhf] https://download.docker.com" - # "/linux/raspbian $(lsb_release -cs) stable\"", shell=True) - # else: - # Logger.info("[INFO] 国内镜像添加成功") + with open(self.apt_source_path, 'a') as f: + f.write("deb https://download.docker.com/linux/raspbian stretch stable") self.prepare() # TODO: 安装docker ce code = subprocess.run("sudo apt-get install docker-ce", shell=True) From 6480336fafa0295474f4720f028c5d026f716ce4 Mon Sep 17 00:00:00 2001 From: morestar Date: Tue, 16 Jul 2019 22:15:11 +0800 Subject: [PATCH 11/12] Update install.py --- install.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/install.py b/install.py index 9a0130d..1369fc5 100644 --- a/install.py +++ b/install.py @@ -419,11 +419,31 @@ def install_docker(self): # f.write() +class UbuntuService: + def __init__(self): + pass + + def upgrade_python(self): + subprocess.run("sudo apt-get install wget", shell=True) + subprocess.run("wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tgz", shell=True) + subprocess.run("tar -xvzf Python-3.7.4.tgz", shell=True) + os.chdir("Python-3.7.4") + subprocess.run("./configure --with-ssl --prefix=/usr/local/python3", shell=True) + subprocess.run("sudo apt-get update && sudo apt-get install build-essential python-dev python-setuptools python-pip", shell=True) + subprocess.run("sudo make && sudo make install", shell=True) + subprocess.run("sudo rm -rf /usr/bin/python3", shell=True) + subprocess.run("sudo rm -rf /usr/bin/pip3", shell=True) + subprocess.run("sudo ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3", shell=True) + subprocess.run("sudo ln -s /usr/local/python3/bin/pip3.7 /usr/bin/pip3", shell=True) + + + class Install: try: opts, args = getopt.getopt(sys.argv[1:], "-w-p-s-h", ["help", "pv", "hv", "cps", "cas", "uh", "ih", "has", "im", - "rh", "phl", "up", "ush", "sh", "sth", "id"]) + "rh", "phl", "up", "ush", "sh", "sth", "id", "uup"]) service = Service() + ubuntuservice = UbuntuService() for opt, value in opts: if opt == "-h" or opt == "--help": Logger.info("-h 显示帮助") @@ -485,6 +505,8 @@ class Install: service.stop_ha() elif opt == "--id": service.install_docker() + elif opt == "-uup": + ubuntuservice.upgrade_python() except getopt.GetoptError: Logger.error("[ERROR] 没有这个选项, 请使用-h或--help查看可用选项") From 4c70290dea299a2d2af88039094038f9dad46102 Mon Sep 17 00:00:00 2001 From: morestar Date: Tue, 16 Jul 2019 22:18:44 +0800 Subject: [PATCH 12/12] Update install.py --- install.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/install.py b/install.py index 1369fc5..c2e1661 100644 --- a/install.py +++ b/install.py @@ -505,7 +505,7 @@ class Install: service.stop_ha() elif opt == "--id": service.install_docker() - elif opt == "-uup": + elif opt == "--uup": ubuntuservice.upgrade_python() except getopt.GetoptError: Logger.error("[ERROR] 没有这个选项, 请使用-h或--help查看可用选项") @@ -516,3 +516,5 @@ class Install: Install() except PermissionError: Logger.error("[ERROR] 权限不足,请使用sudo权限运行此程序") + +# sudo python3 install.py --uup \ No newline at end of file