|
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 显示欢迎信息
|
|
|
|
|
welcome () {
|
|
|
|
|
echo "==欢迎使用machete_installer=="
|
|
|
|
|
echo "本脚本为开源项目,网址:https://git.filesite.io/filesite/machete_installer"
|
|
|
|
|
echo "它将指引并安装docker desktop和machete的docker镜像"
|
|
|
|
|
echo "并完成machete的基本配置,在你的电脑上创建两个网站,一个管理图片,一个管理视频"
|
|
|
|
|
echo ""
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 显示结束语
|
|
|
|
|
theend () {
|
|
|
|
|
echo ""
|
|
|
|
|
echo "==感谢使用machete_installer=="
|
|
|
|
|
echo "本脚本为开源项目,网址:https://git.filesite.io/filesite/machete_installer"
|
|
|
|
|
echo "个性化配置请参考官方文档:"
|
|
|
|
|
echo "https://filesite.io/view/?id=2907455e19bee577f8ed4c9fac83ae95"
|
|
|
|
|
echo ""
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 获取用户桌面绝对路径
|
|
|
|
|
getHomePath () {
|
|
|
|
|
cd ~/
|
|
|
|
|
path=`pwd`
|
|
|
|
|
cd -
|
|
|
|
|
echo $path
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 获取本地局域网ip地址
|
|
|
|
|
getLocalIp () {
|
|
|
|
|
ipstr=`ifconfig -a | grep -v grep | grep '192.168'`
|
|
|
|
|
echo "${ipstr}" | cut -d ' ' -f 2
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 获取mac mini的cpu芯片型号信息
|
|
|
|
|
getCpuInfo () {
|
|
|
|
|
cpu_info=`sysctl -n machdep.cpu.brand_string`
|
|
|
|
|
echo "你的电脑芯片型号:${cpu_info}"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 获取电脑cpu类型
|
|
|
|
|
# 返回值:1 = intel芯片,2 = 苹果芯片
|
|
|
|
|
getCpuType () {
|
|
|
|
|
cpu_info=`sysctl -n machdep.cpu.brand_string`
|
|
|
|
|
|
|
|
|
|
if [[ $cpu_info == *"Intel"* ]]; then
|
|
|
|
|
return 1 #intel芯片
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
return 2 #默认为苹果芯片
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 检测是否已经安装了docker
|
|
|
|
|
# 返回值:0 - 未安装,1 - 已安装
|
|
|
|
|
detectDockerInstalled () {
|
|
|
|
|
res=`command -v docker | wc -l`
|
|
|
|
|
if [ $res -gt 0 ]; then
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 检测docker desktop是否启动
|
|
|
|
|
# 返回值:0 - 未启动,1 - 已启动
|
|
|
|
|
detectDockerStarted () {
|
|
|
|
|
res=`docker images | grep -v grep | grep "IMAGE ID" | wc -l`
|
|
|
|
|
if [ $res -gt 0 ]; then
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 检测docker image是否下载
|
|
|
|
|
# 返回值:0 - 未下载,1 - 已下载
|
|
|
|
|
detectDockerImageExists () {
|
|
|
|
|
imgName=$1
|
|
|
|
|
if [ -z "${imgName}" ]; then
|
|
|
|
|
imgName="filesite/machete"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
res=`docker images | grep -v grep | grep "${imgName}" | wc -l`
|
|
|
|
|
if [ $res -gt 0 ]; then
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 检测docker container是否启动
|
|
|
|
|
# 返回值:0 - 未启动,1 - 已启动
|
|
|
|
|
detectDockerContainerExists () {
|
|
|
|
|
containerName=$1
|
|
|
|
|
if [ -z "${containerName}" ]; then
|
|
|
|
|
containerName="machete_album"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
res=`docker ps -a | grep -v grep | grep "${containerName}" | wc -l`
|
|
|
|
|
if [ $res -gt 0 ]; then
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 下载machete最新源码
|
|
|
|
|
# 返回值:0 - 未下载,1 - 已下载
|
|
|
|
|
downloadMacheteSourceCode () {
|
|
|
|
|
if [ -f machete_src.zip ]; then
|
|
|
|
|
echo "machete源码下载完成"
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
echo "machete源码下载中..."
|
|
|
|
|
url="https://git.filesite.io/filesite/machete/archive/master.zip"
|
|
|
|
|
curl -o machete_src.zip "${url}"
|
|
|
|
|
|
|
|
|
|
if [ -f machete_src.zip ]; then
|
|
|
|
|
echo "machete源码下载完成"
|
|
|
|
|
return 1
|
|
|
|
|
else
|
|
|
|
|
echo "⚠️⚠️"
|
|
|
|
|
echo "achete源码下载失败,请检查网络后重试"
|
|
|
|
|
return 0
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 启动相册容器,端口:8181
|
|
|
|
|
# @album_name 容器名
|
|
|
|
|
# @album_path 相册保存路径
|
|
|
|
|
dockerStartAlbumContainer () {
|
|
|
|
|
album_name=$1
|
|
|
|
|
album_path=$2
|
|
|
|
|
if [ -z "${album_name}" ]; then
|
|
|
|
|
album_name="machete_album"
|
|
|
|
|
fi
|
|
|
|
|
if [ -z "${album_path}" ]; then
|
|
|
|
|
homePath=`getHomePath`
|
|
|
|
|
album_path="${homePath}/Album_by_filesite"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
docker run --name "${album_name}" \
|
|
|
|
|
-p 8181:80 \
|
|
|
|
|
-v "${album_path}:/var/www/machete/www/girls/" \
|
|
|
|
|
-itd filesite/machete \
|
|
|
|
|
beauty
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 启动视频容器,端口:8182
|
|
|
|
|
# @blog_name 容器名
|
|
|
|
|
# @blog_path 视频保存路径
|
|
|
|
|
dockerStartVideoContainer () {
|
|
|
|
|
blog_name=$1
|
|
|
|
|
blog_path=$2
|
|
|
|
|
if [ -z "${blog_name}" ]; then
|
|
|
|
|
blog_name="machete_videos"
|
|
|
|
|
fi
|
|
|
|
|
if [ -z "${blog_path}" ]; then
|
|
|
|
|
homePath=`getHomePath`
|
|
|
|
|
blog_path="${homePath}/Videos_by_filesite"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
docker run --name "${blog_name}" \
|
|
|
|
|
-p 8182:80 \
|
|
|
|
|
-v "${blog_path}:/var/www/machete/www/videos/" \
|
|
|
|
|
-itd filesite/machete \
|
|
|
|
|
videoblog
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 检测域名是否能连接
|
|
|
|
|
# 返回值:0 - 不能连接,1 - 可连接
|
|
|
|
|
detectDomainCanConnect () {
|
|
|
|
|
domain=$1
|
|
|
|
|
if [ -z "${domain}" ]; then
|
|
|
|
|
echo "Usage: detectDomainCanConnect domain"
|
|
|
|
|
echo ""
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
ping_res=`ping -c 3 "${domain}"`
|
|
|
|
|
if [[ $ping_res == *"100.0% packet loss"* ]]; then
|
|
|
|
|
return 0
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
return 1
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 获取docker desktop下载地址
|
|
|
|
|
# 参数:connect_res,可选值:[0, 1]
|
|
|
|
|
getDockerDesktopDownloadUrl () {
|
|
|
|
|
getCpuType
|
|
|
|
|
cup_type=$?
|
|
|
|
|
|
|
|
|
|
dmgLink_docker="https://desktop.docker.com/mac/main/arm64/Docker.dmg"
|
|
|
|
|
dmgLink="https://static.jialuoma.cn/docker_desktop/docker_arm64.dmg"
|
|
|
|
|
|
|
|
|
|
if [ $cup_type -eq 1 ]; then
|
|
|
|
|
dmgLink_docker="https://desktop.docker.com/mac/main/amd64/Docker.dmg"
|
|
|
|
|
dmgLink="https://static.jialuoma.cn/docker_desktop/docker_amd64.dmg"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
connect_res=$1
|
|
|
|
|
if [ $connect_res -eq 0 ]; then
|
|
|
|
|
echo "${dmgLink}"
|
|
|
|
|
else
|
|
|
|
|
#原网址
|
|
|
|
|
echo "${dmgLink_docker}"
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 下载docker desktop
|
|
|
|
|
downloadDockerDesktop () {
|
|
|
|
|
link=$1
|
|
|
|
|
if [ -z "${link}" ]; then
|
|
|
|
|
echo "Usage: downloadDockerDesktop url"
|
|
|
|
|
echo ""
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
echo "docker desktop下载链接:${link}"
|
|
|
|
|
echo "即将在浏览器中打开docker desktop的下载链接并开始下载"
|
|
|
|
|
echo "请在docker desktop下载完成后,双击打开安装"
|
|
|
|
|
open "${link}"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 创建桌面快捷方式
|
|
|
|
|
createShortcuts () {
|
|
|
|
|
ip=`getLocalIp`
|
|
|
|
|
|
|
|
|
|
type=$1
|
|
|
|
|
|
|
|
|
|
if [ "${type}" == "album" ]; then
|
|
|
|
|
echo "[InternetShortcut]" > ~/Desktop/相册.url
|
|
|
|
|
echo "URL=http://${ip}:8181" >> ~/Desktop/相册.url
|
|
|
|
|
else
|
|
|
|
|
echo "[InternetShortcut]" > ~/Desktop/视频.url
|
|
|
|
|
echo "URL=http://${ip}:8182" >> ~/Desktop/视频.url
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 安装docker desktop和machete
|
|
|
|
|
welcome
|
|
|
|
|
|
|
|
|
|
detectDockerInstalled
|
|
|
|
|
docker_installed=$?
|
|
|
|
|
|
|
|
|
|
if [ $docker_installed -eq 0 ]; then
|
|
|
|
|
getCpuInfo
|
|
|
|
|
|
|
|
|
|
detect_domain='desktop.docker.com'
|
|
|
|
|
echo "正在检测是否能连接[${detect_domain}],请稍后..."
|
|
|
|
|
detectDomainCanConnect "${detect_domain}"
|
|
|
|
|
connect_res=$?
|
|
|
|
|
if [ $connect_res -eq 0 ]; then
|
|
|
|
|
echo "⚠️⚠️"
|
|
|
|
|
echo "当前网络无法连接[${detect_domain}],即将从备用网址下载docker desktop,预计耗时 30 分钟"
|
|
|
|
|
echo "如果你已经下载过docker desktop,请复制到当前电脑直接安装"
|
|
|
|
|
read -p "确认继续下载?(Y/N): " confirm
|
|
|
|
|
if [[ $confirm == [yY] || $confirm == [yY][eE][sS] ]]; then
|
|
|
|
|
link=`getDockerDesktopDownloadUrl $connect_res`
|
|
|
|
|
downloadDockerDesktop "${link}"
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
echo "如果你已经安装完成,请按Y继续安装machete镜像"
|
|
|
|
|
read -p "docker desktop已安装,继续?(Y/N): " confirm && [[ $confirm == [yY] || $confirm == [yY][eE][sS] ]] || exit 1
|
|
|
|
|
|
|
|
|
|
detectDockerInstalled
|
|
|
|
|
docker_installed=$?
|
|
|
|
|
if [ $docker_installed -eq 0 ]; then
|
|
|
|
|
echo "⚠️⚠️⚠️"
|
|
|
|
|
echo "命令行检测不到docker,请确认docker desktop已经安装"
|
|
|
|
|
echo "如果docker desktop已经安装,请关闭当前termina窗口重新打开命令行终端窗口,重新执行此安装脚本"
|
|
|
|
|
echo ""
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
detectDockerStarted
|
|
|
|
|
docker_started=$?
|
|
|
|
|
if [ $docker_started -eq 0 ]; then
|
|
|
|
|
echo "⚠️⚠️"
|
|
|
|
|
echo "请双击docker图标启动docker desktop,再继续下一步"
|
|
|
|
|
read -p "已经启动docker desktop,继续安装?(Y/N): " confirm && [[ $confirm == [yY] || $confirm == [yY][eE][sS] ]] || exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
echo "正在为你安装machete镜像..."
|
|
|
|
|
echo ""
|
|
|
|
|
detectDockerImageExists "filesite/machete"
|
|
|
|
|
imgExist=$?
|
|
|
|
|
if [ $imgExist -eq 0 ]; then
|
|
|
|
|
if [ ! -f ./machete.tar ]; then
|
|
|
|
|
echo "下载machete的docker镜像,文件大小89M,预计需要 5 - 10 分钟..."
|
|
|
|
|
curl -o machete.tar "https://static.jialuoma.cn/docker_images/machete.tar"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if [ -f ./machete.tar ]; then
|
|
|
|
|
sumok="eacbdfb33873e79d1eccca7fa2d0706a"
|
|
|
|
|
checkRes=`md5 machete.tar | grep -v grep | grep "${sumok}" | wc -l`
|
|
|
|
|
if [ $checkRes -gt 0 ]; then
|
|
|
|
|
echo "machete的docker镜像下载完成,即将导入docker"
|
|
|
|
|
docker image load --input machete.tar
|
|
|
|
|
# 再次确认image下载成功
|
|
|
|
|
detectDockerImageExists "filesite/machete"
|
|
|
|
|
imgExist=$?
|
|
|
|
|
if [ $imgExist -eq 0 ]; then
|
|
|
|
|
echo "⚠️⚠️"
|
|
|
|
|
echo "machete的docker镜像导入失败,请检查网络后重试"
|
|
|
|
|
echo ""
|
|
|
|
|
exit 1
|
|
|
|
|
else
|
|
|
|
|
echo "machete的docker镜像导入完成,即将开始安装相册和视频系统"
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
echo "开始安装相册系统..."
|
|
|
|
|
containerName="machete_album"
|
|
|
|
|
detectDockerContainerExists "${containerName}"
|
|
|
|
|
containerExist=$?
|
|
|
|
|
if [ $containerExist -eq 0 ]; then
|
|
|
|
|
read -p "请输入相册保存绝对路径后回车(默认保存到桌面Album_by_filesite): " album_path
|
|
|
|
|
if [ -z "${album_path}" ]; then
|
|
|
|
|
homePath=`getHomePath`
|
|
|
|
|
album_path="${homePath}/Album_by_filesite"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if [ ! -d "${album_path}" ]; then
|
|
|
|
|
read -p "目录【${album_path}】不存在,确认创建此目录继续安装吗?(Y/N): " confirm
|
|
|
|
|
if [[ $confirm == [yY] || $confirm == [yY][eE][sS] ]]; then
|
|
|
|
|
mkdir -p "${album_path}"
|
|
|
|
|
echo "目录【${album_path}】不存在,已帮你创建"
|
|
|
|
|
else
|
|
|
|
|
echo "⚠️⚠️"
|
|
|
|
|
echo "安装已取消,如需继续安装,请重新执行本安装脚本"
|
|
|
|
|
echo ""
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
echo "启动相册容器中..."
|
|
|
|
|
dockerStartAlbumContainer "${containerName}" "${album_path}"
|
|
|
|
|
docker ps | grep "${containerName}"
|
|
|
|
|
createShortcuts "album"
|
|
|
|
|
ip=`getLocalIp`
|
|
|
|
|
echo "✅✅"
|
|
|
|
|
echo "相册系统已成功安装,并在桌面创建了相册系统的快捷方式,可双击打开"
|
|
|
|
|
echo "还可以在浏览器输入:http://${ip}:8181/ 打开"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
echo "开始安装视频系统..."
|
|
|
|
|
containerName="machete_vlog"
|
|
|
|
|
detectDockerContainerExists "${containerName}"
|
|
|
|
|
containerExist=$?
|
|
|
|
|
if [ $containerExist -eq 0 ]; then
|
|
|
|
|
read -p "请输入视频保存绝对路径后回车(默认保存到桌面Videos_by_filesite): " vlog_path
|
|
|
|
|
if [ -z "${vlog_path}" ]; then
|
|
|
|
|
homePath=`getHomePath`
|
|
|
|
|
vlog_path="${homePath}/Videos_by_filesite"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if [ ! -d "${vlog_path}" ]; then
|
|
|
|
|
read -p "目录【${vlog_path}】不存在,确认创建此目录继续安装吗?(Y/N): " confirm
|
|
|
|
|
if [[ $confirm == [yY] || $confirm == [yY][eE][sS] ]]; then
|
|
|
|
|
mkdir -p "${vlog_path}"
|
|
|
|
|
echo "目录【${vlog_path}】不存在,已帮你创建"
|
|
|
|
|
else
|
|
|
|
|
echo "⚠️⚠️"
|
|
|
|
|
echo "安装已取消,如需继续安装,请重新执行本安装脚本"
|
|
|
|
|
echo ""
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
echo "启动视频容器中..."
|
|
|
|
|
dockerStartVideoContainer "${containerName}" "${vlog_path}"
|
|
|
|
|
docker ps | grep "${containerName}"
|
|
|
|
|
createShortcuts "vlog"
|
|
|
|
|
ip=`getLocalIp`
|
|
|
|
|
echo "✅✅"
|
|
|
|
|
echo "视频系统已成功安装,并在桌面创建了视频系统的快捷方式,可双击打开"
|
|
|
|
|
echo "还可以在浏览器输入:http://${ip}:8182/ 打开"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
theend
|