#!/bin/bash # set -e # @TODO fix sudo in docker command -v sudo >>/dev/null 2>&1 if [ $? -ne 0 ]; then sudo() { eval "$@" } chown() { echo "ignore chown" >>/dev/null 2>&1 } tput() { echo "ignore tput" >>/dev/null 2>&1 } export -f sudo export -f chown export -f tput fi IS_PM_SOURCE_UPDATED=false CHOWN_USER=$CHOWN_USER # fix env CHOWN_USER not found if [ -z "$CHOWN_USER" ]; then # export CHOWN_USER=root CHOWN_USER=$(id -u) fi has_command() { command -v $1 >>/dev/null 2>&1 if [ "$?" = "0" ]; then echo "true" else echo "false" fi } depends() { local cli=$1 if [ "$(has_command $cli)" = "false" ]; then echo "[dependencies] install $cli ..." # macos if [ "$(uname -s)" = "Darwin" ]; then if [ "$(has_command brew)" = "false" ]; then if [ "$GITHUB_ACTIONS" = "true" ]; then echo "in GitHub Actions, not necessary to change homebrew mirror" else # mirror: https://github.com/eryajf/Thanks-Mirror#homebrew export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git" export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git" export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles" fi sudo curl -o- https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh | bash fi brew install -f $cli if [ "$?" != "0" ]; then exit 1 fi return fi # ubuntu if [ "$(has_command apt)" = "true" ]; then if [ "$IS_PM_SOURCE_UPDATED" = "false" ]; then IS_PM_SOURCE_UPDATED=true sudo apt update -y fi sudo apt install -y $cli if [ "$?" != "0" ]; then exit 1 fi return fi # debian if [ "$(has_command apt-get)" = "true" ]; then if [ "$IS_PM_SOURCE_UPDATED" = "false" ]; then IS_PM_SOURCE_UPDATED=true sudo apt-get update -y fi sudo apt-get install -y $cli if [ "$?" != "0" ]; then exit 1 fi return fi # centos if [ "$(has_command yum)" = "true" ]; then if [ "$IS_PM_SOURCE_UPDATED" = "false" ]; then IS_PM_SOURCE_UPDATED=true sudo yum update -y fi sudo yum install -y $cli if [ "$?" != "0" ]; then exit 1 fi return fi # alpine if [ "$(has_command apk)" = "true" ]; then if [ "$IS_PM_SOURCE_UPDATED" = "false" ]; then IS_PM_SOURCE_UPDATED=true sudo apk update fi sudo apk add $cli if [ "$?" != "0" ]; then exit 1 fi return fi # federa if [ "$(has_command dnf)" = "true" ]; then sudo dnf install -y $cli if [ "$?" != "0" ]; then exit 1 fi return fi # archlinux if [ "$(has_command pacman)" = "true" ]; then sudo pacman -Syu --noconfirm $cli if [ "$?" != "0" ]; then exit 1 fi return fi echo "unkown linux package manager: $(uname -a)" exit 1 fi } set -e export ZMICRO_HOME_PARENT_DIR=${ZMICRO_HOME_PARENT_DIR:-"/usr/local/lib"} export ZMICRO_HOME=${ZMICRO_HOME:-"${ZMICRO_HOME_PARENT_DIR}/zmicro"} export ZMICRO_USER_LOCAL_BIN_DIR=${ZMICRO_USER_LOCAL_BIN_DIR:-"/usr/local/bin"} export ZMICRO_GLOBAL_RC_DIR=${ZMICRO_GLOBAL_RC_DIR:-"/etc/zmicro"} export ZMICRO_GLOBAL_RC=$ZMICRO_GLOBAL_RC_DIR/.zmicrorc export ZMICRO_LOG_DIR=${ZMICRO_LOG_DIR:-"/var/log/zmicro"} export ZMICRO_LOCAL_BIN=$ZMICRO_USER_LOCAL_BIN_DIR/zmicro export ZMICRO_ROOT_BIN_DIR=${ZMICRO_ROOT_BIN_DIR:-"/bin"} export OLD_ZMICRO_HOME=$HOME/.zmicro export OLD_ZMICRO_HOME_BAK=${ZMICRO_HOME}.bak if [ ! -d "$ZMICRO_USER_LOCAL_BIN_DIR" ]; then sudo mkdir -p $ZMICRO_USER_LOCAL_BIN_DIR fi # @TO_REMOVE if [ ! -d "$ZMICRO_HOME_PARENT_DIR" ]; then sudo mkdir -p $ZMICRO_HOME_PARENT_DIR fi # Backup if [ -d "$OLD_ZMICRO_HOME" ]; then sudo mv $OLD_ZMICRO_HOME $OLD_ZMICRO_HOME_BAK fi depends bash depends curl # depends wget depends git # Create if [ ! -d "$ZMICRO_HOME" ]; then sudo git clone https://github.com/zcorky/zmicro.git $ZMICRO_HOME if [ "$?" != "0" ]; then echo "error: failed to install zmicro (1)" exit 1 fi fi # Permission if [ ! -w "$ZMICRO_HOME" ]; then sudo chown -R $CHOWN_USER $ZMICRO_HOME fi # Logs # if [ ! -w $ZMICRO_LOG_DIR ]; then # @TODO ensure log permissions if [ ! -d $ZMICRO_LOG_DIR ]; then sudo mkdir -p $ZMICRO_LOG_DIR fi if [ ! -w $ZMICRO_LOG_DIR ]; then sudo chmod -R 777 $ZMICRO_LOG_DIR fi # fi # GLOBAL RC if [ ! -d "$ZMICRO_GLOBAL_RC_DIR" ]; then sudo mkdir -p $ZMICRO_GLOBAL_RC_DIR fi if [ ! -w "$ZMICRO_GLOBAL_RC_DIR" ]; then sudo chown -R $CHOWN_USER $ZMICRO_GLOBAL_RC_DIR fi if [ ! -f "$ZMICRO_GLOBAL_RC" ]; then sudo touch $ZMICRO_GLOBAL_RC fi if [ ! -w "$ZMICRO_GLOBAL_RC" ]; then sudo chown $CHOWN_USER $ZMICRO_GLOBAL_RC fi # Bin if [ -f $ZMICRO_LOCAL_BIN ]; then sudo rm -f $ZMICRO_LOCAL_BIN fi sudo ln -s $ZMICRO_HOME/bin/zmicro $ZMICRO_LOCAL_BIN if [ "$(uname -s)" = "Darwin" ]; then export ZMICRO_ROOT_BIN_DIR=/usr/local/bin fi # MacOS cannot ln to /bin if [ ! -d "$ZMICRO_ROOT_BIN_DIR" ]; then sudo mkdir -p $ZMICRO_ROOT_BIN_DIR fi sudo ln -sf $ZMICRO_HOME/bin/zmicro $ZMICRO_ROOT_BIN_DIR/zmicro >>/dev/null # 2>&1 # . $ZMICRO_HOME/config/config # Init zmicro initialize $@ echo "Congratualation. Zmicro install successfully" echo "Now you can see play with zmicro." # echo "" # echo "First install, you should source profile:" # echo " bash: source \$HOME/.bashrc" # echo " zsh: source \$HOME/.zshrc" # echo "Then run update:" # echo " zmicro update" # echo ""