dan92's picture
Upload 590 files
2db4dde verified
#!/bin/bash
# INSTALL_PATH='/opt/alist'
VERSION='latest'
if [ ! -n "$2" ]; then
INSTALL_PATH='/opt/alist'
else
if [[ $2 == */ ]]; then
INSTALL_PATH=${2%?}
else
INSTALL_PATH=$2
fi
if ! [[ $INSTALL_PATH == */alist ]]; then
INSTALL_PATH="$INSTALL_PATH/alist"
fi
fi
RED_COLOR='\e[1;31m'
GREEN_COLOR='\e[1;32m'
YELLOW_COLOR='\e[1;33m'
BLUE_COLOR='\e[1;34m'
PINK_COLOR='\e[1;35m'
SHAN='\e[1;33;5m'
RES='\e[0m'
clear
# Get platform
if command -v arch >/dev/null 2>&1; then
platform=$(arch)
else
platform=$(uname -m)
fi
ARCH="UNKNOWN"
if [ "$platform" = "x86_64" ]; then
ARCH=amd64
elif [ "$platform" = "aarch64" ]; then
ARCH=arm64
fi
GH_PROXY=''
if [ "$(id -u)" != "0" ]; then
echo -e "\r\n${RED_COLOR}出错了,请使用 root 权限重试!${RES}\r\n" 1>&2
exit 1
elif [ "$ARCH" == "UNKNOWN" ]; then
echo -e "\r\n${RED_COLOR}出错了${RES},一键安装目前仅支持 x86_64和arm64 平台。\r\n其它平台请参考:${GREEN_COLOR}https://alist.nn.ci${RES}\r\n"
exit 1
elif ! command -v systemctl >/dev/null 2>&1; then
echo -e "\r\n${RED_COLOR}出错了${RES},无法确定你当前的 Linux 发行版。\r\n建议手动安装:${GREEN_COLOR}https://alist.nn.ci${RES}\r\n"
exit 1
else
if command -v netstat >/dev/null 2>&1; then
check_port=$(netstat -lnp | grep 5244 | awk '{print $7}' | awk -F/ '{print $1}')
else
echo -e "${GREEN_COLOR}端口检查 ...${RES}"
if command -v yum >/dev/null 2>&1; then
yum install net-tools -y >/dev/null 2>&1
check_port=$(netstat -lnp | grep 5244 | awk '{print $7}' | awk -F/ '{print $1}')
else
apt-get update >/dev/null 2>&1
apt-get install net-tools -y >/dev/null 2>&1
check_port=$(netstat -lnp | grep 5244 | awk '{print $7}' | awk -F/ '{print $1}')
fi
fi
fi
CHECK() {
if [ -f "$INSTALL_PATH/alist" ]; then
echo "此位置已经安装,请选择其他位置,或使用更新命令"
exit 0
fi
if [ $check_port ]; then
kill -9 $check_port
fi
if [ ! -d "$INSTALL_PATH/" ]; then
mkdir -p $INSTALL_PATH
else
rm -rf $INSTALL_PATH && mkdir -p $INSTALL_PATH
fi
}
INSTALL() {
# 下载 Alist 程序
echo -e "\r\n${GREEN_COLOR}下载 Alist $VERSION ...${RES}"
curl -L ${GH_PROXY}https://github.com/ykxVK8yL5L/alist/releases/download/latest/alist-linux-musl-$ARCH.tar.gz -o /tmp/alist.tar.gz $CURL_BAR
tar zxf /tmp/alist.tar.gz -C $INSTALL_PATH/
if [ -f $INSTALL_PATH/alist ]; then
echo -e "${GREEN_COLOR} 下载成功 ${RES}"
else
echo -e "${RED_COLOR}下载 alist-linux-musl-$ARCH.tar.gz 失败!${RES}"
exit 1
fi
# 删除下载缓存
rm -f /tmp/alist*
}
INIT() {
if [ ! -f "$INSTALL_PATH/alist" ]; then
echo -e "\r\n${RED_COLOR}出错了${RES},当前系统未安装 Alist\r\n"
exit 1
else
rm -f $INSTALL_PATH/alist.db
fi
# 创建 systemd
cat >/etc/systemd/system/alist.service <<EOF
[Unit]
Description=Alist service
Wants=network.target
After=network.target network.service
[Service]
Type=simple
WorkingDirectory=$INSTALL_PATH
ExecStart=$INSTALL_PATH/alist server
KillMode=process
[Install]
WantedBy=multi-user.target
EOF
# 添加开机启动
systemctl daemon-reload
systemctl enable alist >/dev/null 2>&1
}
SUCCESS() {
clear
echo "Alist 安装成功!"
echo -e "\r\n访问地址:${GREEN_COLOR}http://YOUR_IP:5244/${RES}\r\n"
echo -e "配置文件路径:${GREEN_COLOR}$INSTALL_PATH/data/config.json${RES}"
# sleep 1s
# cd $INSTALL_PATH
# get_password=$(./alist password 2>&1)
# echo -e "初始管理密码:${GREEN_COLOR}$(echo $get_password | awk -F'your password: ' '{print $2}')${RES}"
echo -e "---------如何获取密码?--------"
echo -e "先cd到alist所在目录:"
echo -e "${GREEN_COLOR}cd $INSTALL_PATH${RES}"
echo -e "随机设置新密码:"
echo -e "${GREEN_COLOR}./alist admin random${RES}"
echo -e "或者手动设置新密码:"
echo -e "${GREEN_COLOR}./alist admin set ${RES}${RED_COLOR}NEW_PASSWORD${RES}"
echo -e "----------------------------"
echo -e "启动服务中"
systemctl restart alist
echo
echo -e "查看状态:${GREEN_COLOR}systemctl status alist${RES}"
echo -e "启动服务:${GREEN_COLOR}systemctl start alist${RES}"
echo -e "重启服务:${GREEN_COLOR}systemctl restart alist${RES}"
echo -e "停止服务:${GREEN_COLOR}systemctl stop alist${RES}"
echo -e "\r\n温馨提示:如果端口无法正常访问,请检查 \033[36m服务器安全组、本机防火墙、Alist状态\033[0m"
echo
}
UNINSTALL() {
echo -e "\r\n${GREEN_COLOR}卸载 Alist ...${RES}\r\n"
echo -e "${GREEN_COLOR}停止进程${RES}"
systemctl disable alist >/dev/null 2>&1
systemctl stop alist >/dev/null 2>&1
echo -e "${GREEN_COLOR}清除残留文件${RES}"
rm -rf $INSTALL_PATH /etc/systemd/system/alist.service
# 兼容之前的版本
rm -f /lib/systemd/system/alist.service
systemctl daemon-reload
echo -e "\r\n${GREEN_COLOR}Alist 已在系统中移除!${RES}\r\n"
}
UPDATE() {
if [ ! -f "$INSTALL_PATH/alist" ]; then
echo -e "\r\n${RED_COLOR}出错了${RES},当前系统未安装 Alist\r\n"
exit 1
else
config_content=$(cat $INSTALL_PATH/data/config.json)
if [[ "${config_content}" == *"assets"* ]]; then
echo -e "\r\n${RED_COLOR}出错了${RES},V3与V2不兼容,请先卸载V2或更换位置安装V3\r\n"
exit 1
fi
echo
echo -e "${GREEN_COLOR}停止 Alist 进程${RES}\r\n"
systemctl stop alist
# 备份 alist 二进制文件,供下载更新失败回退
cp $INSTALL_PATH/alist /tmp/alist.bak
echo -e "${GREEN_COLOR}下载 Alist $VERSION ...${RES}"
curl -L ${GH_PROXY}https://github.com/ykxVK8yL5L/alist/releases/download/latest/alist-linux-musl-$ARCH.tar.gz -o /tmp/alist.tar.gz $CURL_BAR
tar zxf /tmp/alist.tar.gz -C $INSTALL_PATH/
if [ -f $INSTALL_PATH/alist ]; then
echo -e "${GREEN_COLOR} 下载成功 ${RES}"
else
echo -e "${RED_COLOR}下载 alist-linux-musl-$ARCH.tar.gz 出错,更新失败!${RES}"
echo "回退所有更改 ..."
mv /tmp/alist.bak $INSTALL_PATH/alist
systemctl start alist
exit 1
fi
echo -e "---------如何获取密码?--------"
echo -e "先cd到alist所在目录:"
echo -e "${GREEN_COLOR}cd $INSTALL_PATH${RES}"
echo -e "随机设置新密码:"
echo -e "${GREEN_COLOR}./alist admin random${RES}"
echo -e "或者手动设置新密码:"
echo -e "${GREEN_COLOR}./alist admin set ${RES}${RED_COLOR}NEW_PASSWORD${RES}"
echo -e "----------------------------"
echo -e "\r\n${GREEN_COLOR}启动 Alist 进程${RES}"
systemctl start alist
echo -e "\r\n${GREEN_COLOR}Alist 已更新到最新稳定版!${RES}\r\n"
# 删除临时文件
rm -f /tmp/alist*
fi
}
# CURL 进度显示
if curl --help | grep progress-bar >/dev/null 2>&1; then # $CURL_BAR
CURL_BAR="--progress-bar"
fi
# The temp directory must exist
if [ ! -d "/tmp" ]; then
mkdir -p /tmp
fi
# Fuck bt.cn (BT will use chattr to lock the php isolation config)
chattr -i -R $INSTALL_PATH >/dev/null 2>&1
if [ "$1" = "uninstall" ]; then
UNINSTALL
elif [ "$1" = "update" ]; then
UPDATE
elif [ "$1" = "install" ]; then
CHECK
INSTALL
INIT
if [ -f "$INSTALL_PATH/alist" ]; then
SUCCESS
else
echo -e "${RED_COLOR} 安装失败${RES}"
fi
else
echo -e "${RED_COLOR} 错误的命令${RES}"
fi