diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 0000000..ff83214 --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,60 @@ +# Maintainer: Your Name + +pkgname=tms-bbt-conifg +pkgver=1.0 +pkgrel=2 +pkgdesc="SmartTMS application conifg." +arch=('x86_64') +url="https://your.company.com/smarttms" +license=('Proprietary') + +depends=('tms-bbt') + +source=("${pkgname}.tar.gz") + +sha256sums=('be029b44cf166db45176f43bd0008dcbe6f597a877afb34b98bd2c399310853e') + +install="${pkgname}.install" + +prepare() { + cd "${srcdir}/${pkgname}" +} + +build() { + msg "No build step required for this package." +} + +package() { + # 定义目标目录,保持 /home/smart 路径不变 + local _app_base_dir="/home/smart/.tms3" + local _starter_dir="${_app_base_dir}/starter" + + # 1. 创建目标目录 + install -d -m777 "${pkgdir}${_app_base_dir}" + install -d -m777 "${pkgdir}${_tomcat_dir}" + install -d -m777 "${pkgdir}${_starter_dir}" + + install -d "${pkgdir}/usr/bin" + install -d "${pkgdir}/usr/share/applications" + + # 2. 复制应用程序文件 + # 进入已解压的 tarball 目录 + cd "${srcdir}/${pkgname}" + + install -m755 bbttms.sh "${pkgdir}${_starter_dir}/bbttms.sh" + install -m755 tms-tools.sh "${pkgdir}${_starter_dir}/tms-tools.sh" + install -m755 nm_network_manager.sh "${pkgdir}${_starter_dir}/nm_network_manager.sh" + + install -m755 .bashrc "${pkgdir}/home/smart/.bashrc_tms-config" + install -m755 BBTTMS.png "${pkgdir}/home/smart/BBTTMS.png" + install -m755 change-servername_s2 "${pkgdir}/usr/bin/change-servername_s2" + install -m755 dcpomatic2_create "${pkgdir}/home/smart/dcpomatic2_create" + install -m755 ffmpeg "${pkgdir}/home/smart/ffmpeg" + install -m755 hostname "${pkgdir}/usr/bin/hostname" + install -m755 smart-organizer-service-install.sh "${pkgdir}/home/smart/smart-organizer-service-install.sh" + install -m644 tms-tools.desktop "${pkgdir}/usr/share/applications/tms-tools.desktop" + install -m755 unzipKDM.png "${pkgdir}/home/smart/unzipKDM.png" + install -m755 unzipKDMs.sh "${pkgdir}/home/smart/unzipKDMs.sh" + install -m644 uzipkdm.desktop "${pkgdir}/usr/share/applications/uzipkdm.desktop" + +} diff --git a/tms-bbt-conifg.install b/tms-bbt-conifg.install new file mode 100644 index 0000000..f68840d --- /dev/null +++ b/tms-bbt-conifg.install @@ -0,0 +1,40 @@ +# post_install: 在软件包安装后执行 +post_install() { + update-desktop-database /usr/share/applications + echo "Checking for 'smart' user..." + if ! id -u smart &>/dev/null; then + echo "WARNING: User 'smart' does not exist. Please create the 'smart' user for SmartTMS to function correctly." + echo "You can create it with: sudo useradd -m smart" + else + # 处理 .bashrc + if [ -f "/home/smart/.bashrc" ]; then + mv "/home/smart/.bashrc_tms-config" "/home/smart/.bashrc" + chown smart:smart "/home/smart/.bashrc" + echo "Copied ~/.bashrc_tms-config to /home/smart/.bashrc." + else + # 如果 .bashrc 不存在,则直接复制我们的模板 + cp "/home/smart/.bashrc_tms-config" "/home/smart/.bashrc" + chown smart:smart "/home/smart/.bashrc" + echo "Copied ~/.bashrc_tms-config to /home/smart/.bashrc." + fi + fi + + echo "cp desktop" + cp -f '/usr/share/applications/barco-communicator.desktop' /home/smart/Desktop + cp -f '/usr/share/applications/barco-commander.desktop' /home/smart/Desktop + cp -f '/usr/share/applications/DCC2.desktop' /home/smart/Desktop + cp -f '/usr/share/applications/DCC.desktop' /home/smart/Desktop + cp -f '/usr/share/applications/restart.desktop' /home/smart/Desktop + cp -f '/usr/share/applications/dcpomatic2.desktop' /home/smart/Desktop + cp -f '/usr/share/applications/org.remmina.Remmina.desktop' /home/smart/Desktop + cp -f '/usr/share/applications/tms.desktop' /home/smart/Desktop + cp -f '/usr/share/applications/sunlogin.desktop' /home/smart/Desktop + cp -f '/usr/share/applications/com.teamviewer.TeamViewer.desktop' /home/smart/Desktop + cp -f '/usr/share/applications/todesk.desktop' /home/smart/Desktop + cp -f '/usr/share/applications/uzipkdm.desktop' /home/smart/Desktop + ln -s /media/kdm /home/smart/Desktop/密钥 + ln -s /media/cinema /home/smart/Desktop/片库 + chown smart:smart /home/smart/Desktop/* + + +} diff --git a/tms-bbt-conifg.tar.gz b/tms-bbt-conifg.tar.gz new file mode 100644 index 0000000..98c88be Binary files /dev/null and b/tms-bbt-conifg.tar.gz differ diff --git a/tms-bbt-conifg/.bashrc b/tms-bbt-conifg/.bashrc new file mode 100755 index 0000000..572ff9e --- /dev/null +++ b/tms-bbt-conifg/.bashrc @@ -0,0 +1,96 @@ +# +# ~/.bashrc +# + +# If not running interactively, don't do anything +[[ $- != *i* ]] && return + +# 基础别名 +alias ls='ls --color=auto' +alias ll='ls -alF' +alias la='ls -A' +alias l='ls -CF' +alias grep='grep --color=auto' + +# 安全操作 +alias rm='rm -i' +alias cp='cp -i' +alias mv='mv -i' + +# 导航别名 +alias ..='cd ..' +alias ...='cd ../..' +alias ....='cd ../../..' + +# 系统信息 +alias df='df -h' +alias du='du -h' +alias dus='du -sh * | sort -nr' +alias free='free -h' + +# Git 快捷方式 +alias gs='git status' +alias ga='git add' +alias gc='git commit' +alias gp='git push' +alias gl='git log --oneline' + +alias tms='sh /home/smart/.tms3/starter/tms-tools.sh' +alias rtms='sh /home/smart/.tms3/starter/restart' + +# 文件大小查看别名 +alias size='ls -lahSr' # 简单版本 +alias sizes='du -sh * | sort -h' # 准确版本 +alias sizeall='du -sh .[!.]* * 2>/dev/null | sort -h' # 包含隐藏文件 + +# 详细版本,显示文件权限和大小 +alias sizedetail='du -sh * | sort -h | while read s n; do ls -ld "$n" | awk '\''{printf "%-10s %-5s %-8s ", $1, $3, $4}'\''; echo "$s $n"; done' + +# 文件大小查看函数 +fsize() { + local path="${1:-.}" # 默认当前目录 + local depth="${2:-0}" # 目录深度 + + echo "=== 文件大小统计: $path ===" + + if [ "$depth" -eq 0 ]; then + # 只显示当前目录下的文件 + du -sh "$path"/* 2>/dev/null | sort -h + else + # 显示指定深度的目录结构 + find "$path" -maxdepth "$depth" -type f -exec du -sh {} + 2>/dev/null | sort -h + fi +} + +# 快捷别名 +alias sz='fsize . 0' +alias sz1='fsize . 1' +alias sz2='fsize . 2' + +# 环境变量 +export EDITOR=vim +export VISUAL=vim +export HISTSIZE=10000 +export HISTFILESIZE=20000 + +# Wine 环境变量 - 添加到 PATH +export WINE_HOME="/home/smart/wine" +export PATH="$WINE_HOME/bin:$PATH" + +# 彩色提示符 +PS1='\[\033[01;33m\]\t\[\033[00m\] \[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' + +# 实用函数 +mkcd() { mkdir -p "$1" && cd "$1"; } +findf() { find . -name "$1" -type f 2>/dev/null; } + +# 检查 wine 是否可用 +wine-check() { + if command -v wine >/dev/null 2>&1; then + echo "✓ Wine is available: $(which wine)" + wine --version + else + echo "✗ Wine not found in PATH" + echo "Current PATH: $PATH" + fi +} diff --git a/tms-bbt-conifg/BBTTMS.png b/tms-bbt-conifg/BBTTMS.png new file mode 100644 index 0000000..ac64ad4 Binary files /dev/null and b/tms-bbt-conifg/BBTTMS.png differ diff --git a/tms-bbt-conifg/bbttms.sh b/tms-bbt-conifg/bbttms.sh new file mode 100755 index 0000000..8dfe0dd --- /dev/null +++ b/tms-bbt-conifg/bbttms.sh @@ -0,0 +1,514 @@ +#!/bin/bash + + +#定义颜色变量 +RED='\E[1;31m' # 红 +GREEN='\E[1;32m' # 绿 +YELOW='\E[1;33m' # 黄 +BLUE='\E[1;34m' # 蓝 +PINK='\E[1;35m' # 粉红 +SHANGREEN='\E[32;5m' #绿色闪烁警示 +SHANBLUE='\E[34;5m' #蓝闪烁警示 +RES='\E[0m' # 清除颜色 + +# 设置一个 trap 在脚本结束时删除文件 +trap "rm -f $SCRIPT_NAME" EXIT + +has_root() { + if [[ $EUID -ne 0 ]]; then + echo "权限需要提升:该安装程序必须由root执行" 1>&2 + exit 1 + fi +} +has_root + + + + +# 倒计时函数 +countdown() { + echo "完成..." + echo "脚本执行完毕,返回主菜单倒计时" + for i in {3..1}; do + echo "$i s..." + sleep 1 + done +} + +# 安装 TMS +download_tms() { + echo "下载 TMS 安装包并解压..." + cd /home/smart + + ziptest=`zip -T install8.5-1022 | grep OK` + + if [ -n "$ziptest" ]; then + echo "安装包已存在,且完整" + rm -rf /home/smart/install8.5 + else + echo "安装包不存在或不完整,重新下载" + rm -rf /home/smart/install8.5* + wget -Nq --show-progress https://bbt-static-a.oss-cn-beijing.aliyuncs.com/smart/environment/install8.5-1022.zip + + fi + + echo -e "${GREEN}解压TMS安装包${RES}" + unzip -o install8.5-1022 + if [ $? -ne 0 ]; then + echo -e "${RED}解压失败,请重新运行脚本${RES}" + exit 1 + fi + + echo -e "${GREEN}完成${RES}" + # 具体命令 +} + + + +install_mysql() { + + echo "安装 MySQL..." + download_tms + cd /home/smart/install8.5/ + #数据库安装 + groupadd -r -g 306 mysql + useradd -r -g 306 -u 306 -d /data/mysql -s /sbin/nologin mysql + mkdir -p /data/mysql + chown mysql:mysql /data/mysql + tar xf /home/smart/install8.5/mysql-5.6.47-linux-glibc2.12-x86_64.tar.gz -C /usr/local/ + sleep 5 + ln -sv /usr/local/mysql-5.6.47-linux-glibc2.12-x86_64 /usr/local/mysql + chown -R root:root /usr/local/mysql/ + cp -b -f /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf + cp -b -f /home/smart/install8.5/my.cnf /etc/my.cnf + + #创建数据库文件 + sudo kill -9 $(ps -ef | grep mysql | awk '{print $2}') + sleep 5 + cd /usr/local/mysql/ + sleep 2 + ./scripts/mysql_install_db --datadir=/data/mysql --user=mysql + + #准备服务脚本,并启动服务 + # sleep 5 + # cp -b -f /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld + + #启动服务 + systemctl daemon-reload + systemctl restart mysqld + #让服务实现开机自动启动 + systemctl enable mysqld + + #将其他相关程序加入到PATH变量中 + echo 'PATH=/usr/local/mysql/bin:$PATH'>> /etc/profile.d/mysql.sh + #source生效 + sh /etc/profile.d/mysql.sh + + + sleep 3 + source ~/.bashrc + sleep 10 + sh /home/smart/install8.5/mysql.sh + sleep 5 + mysqladmin -uroot password PythA90ra5 + + #导入空的数据库 + cat /home/smart/install8.5/tms_db_s3.sql |mysql -u root -pPythA90ra5 + + countdown +} + + +install_tomcat() { + echo "安装 apache-tomcat..." + download_tms + cd /home/smart/install8.5/ + #安装apache-tomcat + mkdir /home/smart/.tms3 + cp -r /home/smart/install8.5/apache-tomcat-7.0.63 /home/smart/.tms3/ + chmod -R 777 /home/smart/.tms3/apache-tomcat-7.0.63 + cp -r /home/smart/install8.5/starter /home/smart/.tms3/ + + rpm -ivh /home/smart/install8.5/ntfs-3g-libs-2022.10.3-1.el8.x86_64.rpm + rpm -ivh /home/smart/install8.5/ntfs-3g-2022.10.3-1.el8.x86_64.rpm + + cp -b -f /home/smart/install8.5/smarttms /bin/smarttms + chmod 755 /bin/smarttms + # echo "setsid /home/smart/.tms3/apache-tomcat-7.0.63/bin/startup.sh">>/etc/rc.local + + #启动服务 + systemctl daemon-reload + systemctl restart smarttms + #让服务实现开机自动启动 + systemctl enable smarttms + + countdown +} + + +# 卸载删除 MySQL +uninstall_mysql() { + echo "卸载删除 MySQL..." + service mysqld stop + pkill -9 mysql* + rm -rf /data/mysql + rm -rf /usr/local/mysql* + rm -rf /etc/my.cnf + + countdown +} + +# 卸载删除 TMS +uninstall_tms() { + echo "卸载删除 TMS..." + smarttms stop + pkill -9 java + rm -rf /home/smart/.tms3 + rm -rf /home/smart/Desktop/restart.desktop + rm -rf /home/smart/Desktop/TMS软件重新启动.desktop + # rm -rf /home/smart/Desktop/片库 + # rm -rf /home/smart/Desktop/密钥 + systemctl daemon-reload + countdown +} + + +install_tms() { + while true; do + echo "选择 TMS 安装选项:" + echo "1. 下载 TMS 安装包并解压" + echo "2. 安装 mysql" + echo "3. 安装 tomcat" + echo "99. 返回主菜单" + read -p "请输入选项 (1-3): " tms_choice + case $tms_choice in + 1) + download_tms + + ;; + 2) + install_mysql + + ;; + 3) + install_tomcat + + ;; + 99) + return + ;; + *) + echo "无效的选项。" + ;; + esac + done +} + + + + + + + +# 修复 TMS 自带 DCP +repair_tms_dcp() { + echo "修复 TMS 自带 DCP..." + + echo "未修复" + # cd /home/smart + # if [ -a /bin/dcpomatic2_create_original ];then + # echo "已修复" + # else + # wget -Nq --show-progress http://yuyujing.cn/data/sh/tms_dcpConversion_rep.zip + # unzip -o tms_dcpConversion_rep.zip + # cd tms_dcpConversion_rep/ + # sh tms_dcpConversion_rep.sh + # fi + # cd /home/smart + # rm -rf tms_dcpConversion_rep* + countdown +} + + +# 完整导入所有 Firefox 配置 +import_all_firefox9() { + echo "完整导入所有配置..." + cd /home/smart + + firefoxBakzip="firefox.default-release-centos9.zip" + firefoxBak="firefox.default-release" + + echo -e "${GREEN}firefox默认及优化配置导入${RES}" | tee -a /home/smart/.tmsInstallLogs.log + wget -Nq --show-progress http://yuyujing.cn/data/sh/${firefoxBakzip} | tee -a /home/smart/.tmsInstallLogs.log + unzip -o ${firefoxBakzip} >> /home/smart/.tmsInstallLogs.log 2>&1 + su smart -c 'firefox & disown' >> /home/smart/.tmsInstallLogs.log 2>&1 + echo "检查firefox配置目录-等待90s生成firefox配置" + for i in {90..1}; do + firefoxname=`find /home/smart/.mozilla/firefox/ -name "*.default-default" 2> /home/smart/.tmsInstallLogs.log` + if [ -n "$firefoxname" ];then + if pgrep -x "firefox" > /dev/null; then + # echo "Firefox is running. Killing the process..." + # 杀死所有 Firefox 进程 + pkill -x "firefox" + # echo "Firefox process terminated." + fi + zip -r /home/smart/firefoxSettingsBackup.default-release.zip "$firefoxname" >> /home/smart/.tmsInstallLogs.log 2>&1 + cd ${firefoxBak}/ + /bin/cp -rf ./* "$firefoxname" + chown -R smart:smart "$firefoxname" + sleep 5 + su smart -c 'firefox & disown' >> /home/smart/.tmsInstallLogs.log 2>&1 + echo "完成" + break + fi + sleep 1 + if [ $i -eq 1 ];then + echo "firefox配置目录不存在..." + break + fi + echo -n '.' + done + cd /home/smart + rm -rf ${firefoxBak}* +} + +# 导入 prefs.js +import_prefs_js9() { + echo "导入 prefs.js..." + cd /home/smart + + firefoxBakzip="firefox.default-release-centos9.zip" + firefoxBak="firefox.default-release" + + echo -e "${GREEN}firefox默认及优化配置导入${RES}" | tee -a /home/smart/.tmsInstallLogs.log + wget -Nq --show-progress http://yuyujing.cn/data/sh/${firefoxBakzip} | tee -a /home/smart/.tmsInstallLogs.log + unzip -o ${firefoxBakzip} >> /home/smart/.tmsInstallLogs.log 2>&1 + su smart -c 'firefox & disown' >> /home/smart/.tmsInstallLogs.log 2>&1 + echo "检查firefox配置目录-等待90s生成firefox配置" + for i in {90..1}; do + firefoxname=`find /home/smart/.mozilla/firefox/ -name "*.default-default" 2> /home/smart/.tmsInstallLogs.log` + if [ -n "$firefoxname" ];then + if pgrep -x "firefox" > /dev/null; then + # echo "Firefox is running. Killing the process..." + # 杀死所有 Firefox 进程 + pkill -x "firefox" + # echo "Firefox process terminated." + fi + zip -r /home/smart/firefoxSettingsBackup.default-release.zip "$firefoxname" >> /home/smart/.tmsInstallLogs.log 2>&1 + cd ${firefoxBak}/ + /bin/cp -rf ./prefs.js "$firefoxname" + chown -R smart:smart "$firefoxname" + sleep 5 + su smart -c 'firefox & disown' >> /home/smart/.tmsInstallLogs.log 2>&1 + echo "完成" + break + fi + sleep 1 + if [ $i -eq 1 ];then + echo "firefox配置目录不存在..." + break + fi + echo -n '.' + done + cd /home/smart + rm -rf ${firefoxBak}* +} + + +# Firefox 优化配置导入 +firefox_import9() { + while true; do + echo "选择 Firefox 优化配置导入:" + echo "1. 完整导入所有(书签,配置等)" + echo "2. 导入 prefs.js(首选项)" + echo "3. 返回主菜单" + read -p "请输入选项 (1-3): " firefox_choice + case $firefox_choice in + 1) + import_all_firefox9 + countdown + ;; + 2) + import_prefs_js9 + countdown + ;; + 3) + return + ;; + *) + echo "无效的选项。" + ;; + esac + done +} + + +# TMS 数据恢复 +tms_data_recovery() { + echo "TMS 数据恢复..." + cd /home/smart + wget -N http://yuyujing.cn/data/sh/tmsRCData.sh && sh tmsRCData.sh + countdown +} + +# 数据库快捷操作 +database_shortcuts() { + echo "数据库快捷操作..." + cd /home/smart + wget -N http://yuyujing.cn/data/sh/tms_tools.sh && sh tms_tools.sh + countdown +} + +# 安装 pure-ftp +install_pure_ftp() { + echo "安装 pure-ftp..." + cd /home/smart + wget -N yuyujing.cn/data/sh/pureftp/pureftp-install.sh && sh pureftp-install.sh + countdown +} + + +# CentOS8-Wine 安装 +centos8_wine_install() { + echo "CentOS8-Wine 安装..." + cd /home/smart + # wget -Nq --show-progress http://yuyujing.cn/data/sh/wine-cenos8-offline.zip + # unzip -o wine-cenos8-offline.zip + # #sh install-wine-i686-centos8-rep.sh + # echo "自行运行安装脚本 install-wine-i686-centos8-rep.sh" + # cd /home/smart + # wget -Nq --show-progress http://yuyujing.cn/data/soft/DCC/DCCs2.exe + # /bin/cp -f DCCs2.exe /home/smart/桌面 + # chown -R smart:smart /home/smart/桌面/DCCs2.exe + # 具体命令 + + wget -N yuyujing.cn/data/sh/wine-wow64.sh && sh wine-wow64.sh + + countdown +} + +# 清理系统空间 +clean_system_space() { + echo "清理系统空间..." + cd /home/smart + wget -Nq http://yuyujing.cn/data/sh/clear/clear.sh && sh clear.sh + rm -rf /home/smart/clear.sh + countdown +} + +# 交换分区占用程序查询 +swap_usage_query() { + echo "交换分区占用程序查询..." + cd /home/smart + wget -Nq http://yuyujing.cn/data/sh/swaplist.sh && sh swaplist.sh + # 具体命令 + countdown +} + +# 网络聚合快速引导 +fast_create_bond0() { + echo "网络聚合快速引导(不要聚合外网接口)..." + cd /home/smart + wget -N yuyujing.cn/data/sh/centos8-bond0-fastcreate.sh && sh centos8-bond0-fastcreate.sh + # 具体命令 + countdown +} + + +# 打开vnc远程桌面 +centos8_vnc() { + echo "打开vnc远程桌面..." + + countdown +} + +# 凤凰佳影 http://IP:29957/TService.asmx +find_url_fhxj() { + echo "搜索凤凰佳影 http://IP:29957/TService.asmx..." + wget -N yuyujing.cn/data/sh/url_scan_bbttms.sh && sh url_scan_bbttms.sh -p 29957 -u /TService.asmx + countdown +} + +# 辰星 http://172.17.17.2:10468/cms-mvs/services/mvsService/GetSchedulesForTMS?pCinemaCode=32036811&pPlanDate=2019-05-06 +find_url_cx() { + echo "搜索辰星 ..." + wget -N yuyujing.cn/data/sh/url_scan_bbttms.sh && sh url_scan_bbttms.sh -p 10468 -u /cms-mvs/services/mvsService + countdown +} + +# 搜索局域网服务 +find_url() { + while true; do + echo "url:" + echo "1. 搜索凤凰佳影" + echo "2. 搜索辰星" + echo "3. 返回主菜单" + read -p "请输入选项 (1-3): " url_choice + case $url_choice in + 1) + find_url_fhxj + ;; + 2) + find_url_cx + ;; + 3) + return + ;; + *) + echo "无效的选项。" + ;; + esac + done +} + + +# 总菜单 ----------------------------------------------------------------------------- + + + +clear +# 定义菜单 +show_menu() { + echo "请选择操作:" + echo "1. 安装 TMS" + echo "2. 卸载删除 MySQL" + echo "3. 卸载删除 TMS" + echo "4. 修复 TMS 自带 DCP" + echo "5. Firefox 优化配置导入" + echo "6. 数据库快捷操作" + echo "7. pure-ftp 安装" + echo "8. 清理系统空间" + echo "9. 交换分区占用程序查询" + echo "11. 网络聚合快速引导" + echo "12. 打开VNC远程桌面" + echo "13. 搜索局域网售票系统主机地址(凤凰嘉影,辰星)" + echo "99. 退出" +} + +# 主程序逻辑 +while true; do + show_menu + read -p "请输入选项 (1-99): " choice + case $choice in + 1) install_tms ;; + 2) uninstall_mysql ;; + 3) uninstall_tms ;; + 4) repair_tms_dcp ;; + 5) firefox_import9 ;; + 6) database_shortcuts ;; + 7) install_pure_ftp ;; + 8) clean_system_space ;; + 9) swap_usage_query ;; + 10) tms_data_recovery ;; + 11) fast_create_bond0 ;; + 12) centos8_vnc ;; + 13) find_url ;; + 99) + echo "退出程序。" + exit 0 + ;; + *) + echo "无效的选项,请重新选择。" + ;; + esac +done diff --git a/tms-bbt-conifg/bbttms.sh.backup.1764188623 b/tms-bbt-conifg/bbttms.sh.backup.1764188623 new file mode 100755 index 0000000..8dfe0dd --- /dev/null +++ b/tms-bbt-conifg/bbttms.sh.backup.1764188623 @@ -0,0 +1,514 @@ +#!/bin/bash + + +#定义颜色变量 +RED='\E[1;31m' # 红 +GREEN='\E[1;32m' # 绿 +YELOW='\E[1;33m' # 黄 +BLUE='\E[1;34m' # 蓝 +PINK='\E[1;35m' # 粉红 +SHANGREEN='\E[32;5m' #绿色闪烁警示 +SHANBLUE='\E[34;5m' #蓝闪烁警示 +RES='\E[0m' # 清除颜色 + +# 设置一个 trap 在脚本结束时删除文件 +trap "rm -f $SCRIPT_NAME" EXIT + +has_root() { + if [[ $EUID -ne 0 ]]; then + echo "权限需要提升:该安装程序必须由root执行" 1>&2 + exit 1 + fi +} +has_root + + + + +# 倒计时函数 +countdown() { + echo "完成..." + echo "脚本执行完毕,返回主菜单倒计时" + for i in {3..1}; do + echo "$i s..." + sleep 1 + done +} + +# 安装 TMS +download_tms() { + echo "下载 TMS 安装包并解压..." + cd /home/smart + + ziptest=`zip -T install8.5-1022 | grep OK` + + if [ -n "$ziptest" ]; then + echo "安装包已存在,且完整" + rm -rf /home/smart/install8.5 + else + echo "安装包不存在或不完整,重新下载" + rm -rf /home/smart/install8.5* + wget -Nq --show-progress https://bbt-static-a.oss-cn-beijing.aliyuncs.com/smart/environment/install8.5-1022.zip + + fi + + echo -e "${GREEN}解压TMS安装包${RES}" + unzip -o install8.5-1022 + if [ $? -ne 0 ]; then + echo -e "${RED}解压失败,请重新运行脚本${RES}" + exit 1 + fi + + echo -e "${GREEN}完成${RES}" + # 具体命令 +} + + + +install_mysql() { + + echo "安装 MySQL..." + download_tms + cd /home/smart/install8.5/ + #数据库安装 + groupadd -r -g 306 mysql + useradd -r -g 306 -u 306 -d /data/mysql -s /sbin/nologin mysql + mkdir -p /data/mysql + chown mysql:mysql /data/mysql + tar xf /home/smart/install8.5/mysql-5.6.47-linux-glibc2.12-x86_64.tar.gz -C /usr/local/ + sleep 5 + ln -sv /usr/local/mysql-5.6.47-linux-glibc2.12-x86_64 /usr/local/mysql + chown -R root:root /usr/local/mysql/ + cp -b -f /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf + cp -b -f /home/smart/install8.5/my.cnf /etc/my.cnf + + #创建数据库文件 + sudo kill -9 $(ps -ef | grep mysql | awk '{print $2}') + sleep 5 + cd /usr/local/mysql/ + sleep 2 + ./scripts/mysql_install_db --datadir=/data/mysql --user=mysql + + #准备服务脚本,并启动服务 + # sleep 5 + # cp -b -f /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld + + #启动服务 + systemctl daemon-reload + systemctl restart mysqld + #让服务实现开机自动启动 + systemctl enable mysqld + + #将其他相关程序加入到PATH变量中 + echo 'PATH=/usr/local/mysql/bin:$PATH'>> /etc/profile.d/mysql.sh + #source生效 + sh /etc/profile.d/mysql.sh + + + sleep 3 + source ~/.bashrc + sleep 10 + sh /home/smart/install8.5/mysql.sh + sleep 5 + mysqladmin -uroot password PythA90ra5 + + #导入空的数据库 + cat /home/smart/install8.5/tms_db_s3.sql |mysql -u root -pPythA90ra5 + + countdown +} + + +install_tomcat() { + echo "安装 apache-tomcat..." + download_tms + cd /home/smart/install8.5/ + #安装apache-tomcat + mkdir /home/smart/.tms3 + cp -r /home/smart/install8.5/apache-tomcat-7.0.63 /home/smart/.tms3/ + chmod -R 777 /home/smart/.tms3/apache-tomcat-7.0.63 + cp -r /home/smart/install8.5/starter /home/smart/.tms3/ + + rpm -ivh /home/smart/install8.5/ntfs-3g-libs-2022.10.3-1.el8.x86_64.rpm + rpm -ivh /home/smart/install8.5/ntfs-3g-2022.10.3-1.el8.x86_64.rpm + + cp -b -f /home/smart/install8.5/smarttms /bin/smarttms + chmod 755 /bin/smarttms + # echo "setsid /home/smart/.tms3/apache-tomcat-7.0.63/bin/startup.sh">>/etc/rc.local + + #启动服务 + systemctl daemon-reload + systemctl restart smarttms + #让服务实现开机自动启动 + systemctl enable smarttms + + countdown +} + + +# 卸载删除 MySQL +uninstall_mysql() { + echo "卸载删除 MySQL..." + service mysqld stop + pkill -9 mysql* + rm -rf /data/mysql + rm -rf /usr/local/mysql* + rm -rf /etc/my.cnf + + countdown +} + +# 卸载删除 TMS +uninstall_tms() { + echo "卸载删除 TMS..." + smarttms stop + pkill -9 java + rm -rf /home/smart/.tms3 + rm -rf /home/smart/Desktop/restart.desktop + rm -rf /home/smart/Desktop/TMS软件重新启动.desktop + # rm -rf /home/smart/Desktop/片库 + # rm -rf /home/smart/Desktop/密钥 + systemctl daemon-reload + countdown +} + + +install_tms() { + while true; do + echo "选择 TMS 安装选项:" + echo "1. 下载 TMS 安装包并解压" + echo "2. 安装 mysql" + echo "3. 安装 tomcat" + echo "99. 返回主菜单" + read -p "请输入选项 (1-3): " tms_choice + case $tms_choice in + 1) + download_tms + + ;; + 2) + install_mysql + + ;; + 3) + install_tomcat + + ;; + 99) + return + ;; + *) + echo "无效的选项。" + ;; + esac + done +} + + + + + + + +# 修复 TMS 自带 DCP +repair_tms_dcp() { + echo "修复 TMS 自带 DCP..." + + echo "未修复" + # cd /home/smart + # if [ -a /bin/dcpomatic2_create_original ];then + # echo "已修复" + # else + # wget -Nq --show-progress http://yuyujing.cn/data/sh/tms_dcpConversion_rep.zip + # unzip -o tms_dcpConversion_rep.zip + # cd tms_dcpConversion_rep/ + # sh tms_dcpConversion_rep.sh + # fi + # cd /home/smart + # rm -rf tms_dcpConversion_rep* + countdown +} + + +# 完整导入所有 Firefox 配置 +import_all_firefox9() { + echo "完整导入所有配置..." + cd /home/smart + + firefoxBakzip="firefox.default-release-centos9.zip" + firefoxBak="firefox.default-release" + + echo -e "${GREEN}firefox默认及优化配置导入${RES}" | tee -a /home/smart/.tmsInstallLogs.log + wget -Nq --show-progress http://yuyujing.cn/data/sh/${firefoxBakzip} | tee -a /home/smart/.tmsInstallLogs.log + unzip -o ${firefoxBakzip} >> /home/smart/.tmsInstallLogs.log 2>&1 + su smart -c 'firefox & disown' >> /home/smart/.tmsInstallLogs.log 2>&1 + echo "检查firefox配置目录-等待90s生成firefox配置" + for i in {90..1}; do + firefoxname=`find /home/smart/.mozilla/firefox/ -name "*.default-default" 2> /home/smart/.tmsInstallLogs.log` + if [ -n "$firefoxname" ];then + if pgrep -x "firefox" > /dev/null; then + # echo "Firefox is running. Killing the process..." + # 杀死所有 Firefox 进程 + pkill -x "firefox" + # echo "Firefox process terminated." + fi + zip -r /home/smart/firefoxSettingsBackup.default-release.zip "$firefoxname" >> /home/smart/.tmsInstallLogs.log 2>&1 + cd ${firefoxBak}/ + /bin/cp -rf ./* "$firefoxname" + chown -R smart:smart "$firefoxname" + sleep 5 + su smart -c 'firefox & disown' >> /home/smart/.tmsInstallLogs.log 2>&1 + echo "完成" + break + fi + sleep 1 + if [ $i -eq 1 ];then + echo "firefox配置目录不存在..." + break + fi + echo -n '.' + done + cd /home/smart + rm -rf ${firefoxBak}* +} + +# 导入 prefs.js +import_prefs_js9() { + echo "导入 prefs.js..." + cd /home/smart + + firefoxBakzip="firefox.default-release-centos9.zip" + firefoxBak="firefox.default-release" + + echo -e "${GREEN}firefox默认及优化配置导入${RES}" | tee -a /home/smart/.tmsInstallLogs.log + wget -Nq --show-progress http://yuyujing.cn/data/sh/${firefoxBakzip} | tee -a /home/smart/.tmsInstallLogs.log + unzip -o ${firefoxBakzip} >> /home/smart/.tmsInstallLogs.log 2>&1 + su smart -c 'firefox & disown' >> /home/smart/.tmsInstallLogs.log 2>&1 + echo "检查firefox配置目录-等待90s生成firefox配置" + for i in {90..1}; do + firefoxname=`find /home/smart/.mozilla/firefox/ -name "*.default-default" 2> /home/smart/.tmsInstallLogs.log` + if [ -n "$firefoxname" ];then + if pgrep -x "firefox" > /dev/null; then + # echo "Firefox is running. Killing the process..." + # 杀死所有 Firefox 进程 + pkill -x "firefox" + # echo "Firefox process terminated." + fi + zip -r /home/smart/firefoxSettingsBackup.default-release.zip "$firefoxname" >> /home/smart/.tmsInstallLogs.log 2>&1 + cd ${firefoxBak}/ + /bin/cp -rf ./prefs.js "$firefoxname" + chown -R smart:smart "$firefoxname" + sleep 5 + su smart -c 'firefox & disown' >> /home/smart/.tmsInstallLogs.log 2>&1 + echo "完成" + break + fi + sleep 1 + if [ $i -eq 1 ];then + echo "firefox配置目录不存在..." + break + fi + echo -n '.' + done + cd /home/smart + rm -rf ${firefoxBak}* +} + + +# Firefox 优化配置导入 +firefox_import9() { + while true; do + echo "选择 Firefox 优化配置导入:" + echo "1. 完整导入所有(书签,配置等)" + echo "2. 导入 prefs.js(首选项)" + echo "3. 返回主菜单" + read -p "请输入选项 (1-3): " firefox_choice + case $firefox_choice in + 1) + import_all_firefox9 + countdown + ;; + 2) + import_prefs_js9 + countdown + ;; + 3) + return + ;; + *) + echo "无效的选项。" + ;; + esac + done +} + + +# TMS 数据恢复 +tms_data_recovery() { + echo "TMS 数据恢复..." + cd /home/smart + wget -N http://yuyujing.cn/data/sh/tmsRCData.sh && sh tmsRCData.sh + countdown +} + +# 数据库快捷操作 +database_shortcuts() { + echo "数据库快捷操作..." + cd /home/smart + wget -N http://yuyujing.cn/data/sh/tms_tools.sh && sh tms_tools.sh + countdown +} + +# 安装 pure-ftp +install_pure_ftp() { + echo "安装 pure-ftp..." + cd /home/smart + wget -N yuyujing.cn/data/sh/pureftp/pureftp-install.sh && sh pureftp-install.sh + countdown +} + + +# CentOS8-Wine 安装 +centos8_wine_install() { + echo "CentOS8-Wine 安装..." + cd /home/smart + # wget -Nq --show-progress http://yuyujing.cn/data/sh/wine-cenos8-offline.zip + # unzip -o wine-cenos8-offline.zip + # #sh install-wine-i686-centos8-rep.sh + # echo "自行运行安装脚本 install-wine-i686-centos8-rep.sh" + # cd /home/smart + # wget -Nq --show-progress http://yuyujing.cn/data/soft/DCC/DCCs2.exe + # /bin/cp -f DCCs2.exe /home/smart/桌面 + # chown -R smart:smart /home/smart/桌面/DCCs2.exe + # 具体命令 + + wget -N yuyujing.cn/data/sh/wine-wow64.sh && sh wine-wow64.sh + + countdown +} + +# 清理系统空间 +clean_system_space() { + echo "清理系统空间..." + cd /home/smart + wget -Nq http://yuyujing.cn/data/sh/clear/clear.sh && sh clear.sh + rm -rf /home/smart/clear.sh + countdown +} + +# 交换分区占用程序查询 +swap_usage_query() { + echo "交换分区占用程序查询..." + cd /home/smart + wget -Nq http://yuyujing.cn/data/sh/swaplist.sh && sh swaplist.sh + # 具体命令 + countdown +} + +# 网络聚合快速引导 +fast_create_bond0() { + echo "网络聚合快速引导(不要聚合外网接口)..." + cd /home/smart + wget -N yuyujing.cn/data/sh/centos8-bond0-fastcreate.sh && sh centos8-bond0-fastcreate.sh + # 具体命令 + countdown +} + + +# 打开vnc远程桌面 +centos8_vnc() { + echo "打开vnc远程桌面..." + + countdown +} + +# 凤凰佳影 http://IP:29957/TService.asmx +find_url_fhxj() { + echo "搜索凤凰佳影 http://IP:29957/TService.asmx..." + wget -N yuyujing.cn/data/sh/url_scan_bbttms.sh && sh url_scan_bbttms.sh -p 29957 -u /TService.asmx + countdown +} + +# 辰星 http://172.17.17.2:10468/cms-mvs/services/mvsService/GetSchedulesForTMS?pCinemaCode=32036811&pPlanDate=2019-05-06 +find_url_cx() { + echo "搜索辰星 ..." + wget -N yuyujing.cn/data/sh/url_scan_bbttms.sh && sh url_scan_bbttms.sh -p 10468 -u /cms-mvs/services/mvsService + countdown +} + +# 搜索局域网服务 +find_url() { + while true; do + echo "url:" + echo "1. 搜索凤凰佳影" + echo "2. 搜索辰星" + echo "3. 返回主菜单" + read -p "请输入选项 (1-3): " url_choice + case $url_choice in + 1) + find_url_fhxj + ;; + 2) + find_url_cx + ;; + 3) + return + ;; + *) + echo "无效的选项。" + ;; + esac + done +} + + +# 总菜单 ----------------------------------------------------------------------------- + + + +clear +# 定义菜单 +show_menu() { + echo "请选择操作:" + echo "1. 安装 TMS" + echo "2. 卸载删除 MySQL" + echo "3. 卸载删除 TMS" + echo "4. 修复 TMS 自带 DCP" + echo "5. Firefox 优化配置导入" + echo "6. 数据库快捷操作" + echo "7. pure-ftp 安装" + echo "8. 清理系统空间" + echo "9. 交换分区占用程序查询" + echo "11. 网络聚合快速引导" + echo "12. 打开VNC远程桌面" + echo "13. 搜索局域网售票系统主机地址(凤凰嘉影,辰星)" + echo "99. 退出" +} + +# 主程序逻辑 +while true; do + show_menu + read -p "请输入选项 (1-99): " choice + case $choice in + 1) install_tms ;; + 2) uninstall_mysql ;; + 3) uninstall_tms ;; + 4) repair_tms_dcp ;; + 5) firefox_import9 ;; + 6) database_shortcuts ;; + 7) install_pure_ftp ;; + 8) clean_system_space ;; + 9) swap_usage_query ;; + 10) tms_data_recovery ;; + 11) fast_create_bond0 ;; + 12) centos8_vnc ;; + 13) find_url ;; + 99) + echo "退出程序。" + exit 0 + ;; + *) + echo "无效的选项,请重新选择。" + ;; + esac +done diff --git a/tms-bbt-conifg/change-servername_s2 b/tms-bbt-conifg/change-servername_s2 new file mode 100755 index 0000000..9097593 --- /dev/null +++ b/tms-bbt-conifg/change-servername_s2 @@ -0,0 +1,26 @@ +#!/bin/bash + +random_str() { + local randomlength=16 + local str="gg-" + local chars="abcdefghijklmnopqrstuvwxyz0123456789" + + for ((i=0; i /etc/hostname + +cat < /etc/hosts +127.0.0.1 localhost +::1 localhost +127.0.1.1 $NEW_HOSTNAME +EOF + +echo "Hostname set to: $NEW_HOSTNAME" diff --git a/tms-bbt-conifg/dcpomatic2_create b/tms-bbt-conifg/dcpomatic2_create new file mode 100644 index 0000000..26ac3aa --- /dev/null +++ b/tms-bbt-conifg/dcpomatic2_create @@ -0,0 +1,21 @@ +#!/bin/bash + +# 定义参数映射 +declare -A param_map=( + ["--content-ratio"]="--container-ratio" + # 添加更多映射 +) + +# 构建新的参数列表 +new_args=() +for arg in "$@"; do + if [[ -n "${param_map[$arg]}" ]]; then + new_args+=("${param_map[$arg]}") + else + new_args+=("$arg") + fi +done + +# 运行原始的 dcpomatic2_create 命令 +/usr/bin/dcpomatic2_create_original "${new_args[@]}" + diff --git a/tms-bbt-conifg/ffmpeg b/tms-bbt-conifg/ffmpeg new file mode 100644 index 0000000..90d359e --- /dev/null +++ b/tms-bbt-conifg/ffmpeg @@ -0,0 +1,68 @@ +#!/bin/bash + +# ============================================================================== +# FFmpeg Wrapper Script for Volume Detection +# +# This script acts as a wrapper for the real ffmpeg binary. +# It's designed to handle cases where 'ffmpeg -filter:a volumedetect' +# doesn't output 'mean_volume:' (e.g., for image files or videos without audio). +# +# If 'mean_volume:' is not found in the real ffmpeg's stderr output, +# it injects 'mean_volume: 0 dB' into the stderr stream. +# +# Setup: +# 1. Rename your original ffmpeg binary. +# Example: mv /usr/bin/ffmpeg /usr/bin/ffmpeg.bin +# 2. Place this script at the original ffmpeg's path. +# Example: cp this_script.sh /usr/bin/ffmpeg +# 3. Make this script executable. +# Example: chmod +x /usr/bin/ffmpeg +# 4. Ensure REAL_FFMPEG_BINARY points to your renamed ffmpeg binary. +# ============================================================================== + +# --- Configuration --- +# Point this to the actual ffmpeg binary after you've renamed it. +# For example: /usr/bin/ffmpeg.bin or /usr/local/bin/ffmpeg.bin +REAL_FFMPEG_BINARY="/usr/bin/ffmpeg.bin" +# --------------------- + +# Check if the real ffmpeg binary exists +if [ ! -f "$REAL_FFMPEG_BINARY" ]; then + echo "Error: Real ffmpeg binary not found at $REAL_FFMPEG_BINARY" >&2 + echo "Please ensure you've renamed your original ffmpeg (e.g., to ffmpeg.bin)" >&2 + echo "and updated the REAL_FFMPEG_BINARY path in this script." >&2 + exit 1 +fi + +# Create a temporary file to capture stderr from the real ffmpeg command +TEMP_ERR_FILE=$(mktemp) + +# Ensure the temporary file is deleted when the script exits +trap "rm -f $TEMP_ERR_FILE" EXIT + +# Execute the real ffmpeg with all arguments passed to this script. +# Redirect its stdout to /dev/null as volumedetect output is on stderr. +# Redirect its stderr to our temporary file. +"$REAL_FFMPEG_BINARY" "$@" >/dev/null 2>"$TEMP_ERR_FILE" + +# Capture the exit code of the real ffmpeg command +REAL_FFMPEG_EXIT_CODE=$? + +# Read the content of the temporary stderr file +FFMPEG_STDERR_CONTENT=$(cat "$TEMP_ERR_FILE") + +# Check if "mean_volume:" is present in the captured stderr content +if echo "$FFMPEG_STDERR_CONTENT" | grep -q "mean_volume:"; then + # If found, print the original stderr content to our stderr + echo "$FFMPEG_STDERR_CONTENT" >&2 +else + # If not found, print the original stderr content + echo "$FFMPEG_STDERR_CONTENT" >&2 + # Then inject the default mean_volume line + echo "[ffmpeg-wrapper] Injected: mean_volume: 0 dB (original output lacked volume info)" >&2 # For debugging + echo "mean_volume: 0 dB" >&2 +fi + +# Exit with the same exit code as the real ffmpeg command +exit $REAL_FFMPEG_EXIT_CODE + diff --git a/tms-bbt-conifg/hostname b/tms-bbt-conifg/hostname new file mode 100755 index 0000000..a4f91b4 --- /dev/null +++ b/tms-bbt-conifg/hostname @@ -0,0 +1,12 @@ +#!/bin/bash + +# 系统信息函数 +if [ $# -eq 0 ]; then + hostnamectl --static +else + command hostnamectl "$@" +fi + + + + diff --git a/tms-bbt-conifg/nm_network_manager.sh b/tms-bbt-conifg/nm_network_manager.sh new file mode 100644 index 0000000..b242183 --- /dev/null +++ b/tms-bbt-conifg/nm_network_manager.sh @@ -0,0 +1,507 @@ +#!/bin/bash +# +# Arch Linux NetworkManager 管理脚本 - 修复版 +# 功能: 检查网络、自动修复、可靠地备份和恢复配置 +# + +# --- 全局变量和配置 --- +BACKUP_BASE_DIR="/var/lib/network-manager-script" +LOG_FILE="/var/log/nm_manager.log" +ACTIVE_CONNS_LIST="active_connections.list" +CONNECTION_DETAILS_DIR="connection_details" + +# --- 颜色定义 --- +C_RESET='\033[0m' +C_RED='\033[0;31m' +C_GREEN='\033[0;32m' +C_YELLOW='\033[0;33m' +C_BLUE='\033[0;34m' + +# --- 基础函数 --- +log() { echo -e "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"; } +log_success() { log "${C_GREEN}✓ $1${C_RESET}"; } +log_error() { log "${C_RED}✗ $1${C_RESET}"; } +log_warn() { log "${C_YELLOW}⚠ $1${C_RESET}"; } +info() { echo -e "${C_BLUE} $1${C_RESET}"; } + +# 检查root权限和NetworkManager服务 +pre_check() { + if [ "$(id -u)" -ne 0 ]; then + log_error "此脚本需要root权限运行。请使用: sudo \$0" + exit 1 + fi + if ! systemctl is-active --quiet NetworkManager; then + log_error "NetworkManager 服务未运行。请先启动: sudo systemctl start NetworkManager" + exit 1 + fi +} + +# --- 核心功能 --- + +# 1. 检查当前网络状态 +check_status() { + info "--- 当前网络状态 ---" + nmcli device status + info "\n--- 活动连接 ---" + nmcli connection show --active + + log "正在检查外网连接..." + if ping -c 2 -W 3 8.8.8.8 >/dev/null 2>&1 || ping -c 2 -W 3 1.1.1.1 >/dev/null 2>&1; then + log_success "外网连接正常。" + return 0 + else + log_error "外网连接失败。" + return 1 + fi +} + +# 2. 改进的备份网络配置 +backup_config() { + local backup_dir="$BACKUP_BASE_DIR/$(date +%F_%H-%M-%S)" + mkdir -p "$backup_dir" + mkdir -p "$backup_dir/$CONNECTION_DETAILS_DIR" + + log "开始备份网络配置到: $backup_dir" + + # 记录当前活动的连接 + nmcli -t -f NAME,TYPE,UUID,DEVICE connection show --active | grep -v ':loopback:' > "$backup_dir/$ACTIVE_CONNS_LIST" + + # 备份所有非回环连接的详细配置 + local backup_count=0 + while IFS=: read -r conn_name conn_type conn_uuid conn_device; do + if [ -n "$conn_name" ] && [ "$conn_type" != "loopback" ]; then + local safe_name=$(echo "$conn_name" | tr ' /' '_-') + local detail_file="$backup_dir/$CONNECTION_DETAILS_DIR/${safe_name}_${conn_uuid}.conf" + + # 导出连接的完整配置 + if nmcli -f all connection show "$conn_uuid" > "$detail_file" 2>/dev/null; then + info "已备份连接: $conn_name (UUID: $conn_uuid)" + ((backup_count++)) + + # 尝试导出为keyfile格式(如果支持) + local keyfile="$backup_dir/$CONNECTION_DETAILS_DIR/${safe_name}_${conn_uuid}.keyfile" + nmcli connection export "$conn_uuid" "$keyfile" 2>/dev/null || true + else + log_warn "备份连接 '$conn_name' 失败" + fi + fi + done < <(nmcli -t -f NAME,TYPE,UUID,DEVICE connection show | grep -v ':loopback:') + + # 备份网络设备信息 + nmcli device status > "$backup_dir/device_status.txt" + ip addr show > "$backup_dir/ip_addresses.txt" + ip route show > "$backup_dir/routes.txt" + + # 尝试备份系统连接文件(如果存在) + local system_conn_dir="/etc/NetworkManager/system-connections" + if [ -d "$system_conn_dir" ] && [ "$(ls -A "$system_conn_dir" 2>/dev/null)" ]; then + local sys_backup_dir="$backup_dir/system-connections" + mkdir -p "$sys_backup_dir" + cp -r "$system_conn_dir"/* "$sys_backup_dir/" 2>/dev/null + info "已备份系统连接文件" + fi + + if [ "$backup_count" -gt 0 ]; then + # 创建符号链接指向最新备份 + ln -sfn "$backup_dir" "$BACKUP_BASE_DIR/latest" + log_success "备份完成!共备份 $backup_count 个连接配置。" + + # 显示备份摘要 + info "备份摘要:" + info "- 活动连接: $(wc -l < "$backup_dir/$ACTIVE_CONNS_LIST") 个" + info "- 详细配置: $backup_count 个" + info "- 备份位置: $backup_dir" + else + log_warn "未找到任何可备份的连接。" + rm -rf "$backup_dir" + return 1 + fi +} + +# 3. 自动修复网络 +auto_fix() { + log "启动网络自动修复流程..." + if check_status; then + log_success "网络已连接,无需修复。" + return + fi + + log_warn "网络连接中断,将尝试自动修复。" + + # 修复前先执行备份 + backup_config + + log "正在尝试为所有物理网卡设置临时DHCP连接..." + + # 获取所有物理网卡 + while IFS=: read -r device device_type state connection; do + if [ "$device_type" = "ethernet" ] || [ "$device_type" = "wifi" ]; then + if [ -n "$device" ] && [ "$device" != "lo" ]; then + local temp_conn_name="temp-dhcp-$device" + log "处理设备: $device (类型: $device_type, 状态: $state)" + + # 先停用设备上的所有现有连接 + nmcli device disconnect "$device" 2>/dev/null + + # 删除可能存在的旧临时连接 + nmcli connection delete "$temp_conn_name" 2>/dev/null + + # 根据设备类型创建连接 + local conn_type="ethernet" + if [ "$device_type" = "wifi" ]; then + conn_type="wifi" + fi + + # 添加并激活新的临时DHCP连接 + if nmcli connection add type "$conn_type" ifname "$device" con-name "$temp_conn_name" autoconnect yes ipv4.method auto ipv6.method auto >/dev/null 2>&1; then + info "为 $device 创建了临时DHCP连接 '$temp_conn_name'" + # 激活连接 + if nmcli connection up "$temp_conn_name" >/dev/null 2>&1; then + info "成功激活连接 '$temp_conn_name'" + else + log_warn "激活连接 '$temp_conn_name' 失败" + fi + else + log_error "为 $device 创建DHCP连接失败" + fi + fi + fi + done < <(nmcli -t -f DEVICE,TYPE,STATE,CONNECTION device status) + + log "等待网络重新初始化 (10秒)..." + sleep 10 + + log "再次检查网络状态..." + check_status +} + +# 4. 智能恢复网络配置 +restore_config() { + local backup_dir="$BACKUP_BASE_DIR/latest" + if [ ! -d "$backup_dir" ] || [ ! -L "$backup_dir" ]; then + log_error "找不到备份目录。请先执行备份(选项2)或修复(选项3)操作。" + return 1 + fi + + local real_backup_dir=$(readlink -f "$backup_dir") + log "将从以下备份中恢复: $real_backup_dir" + + # 显示备份信息 + if [ -f "$real_backup_dir/$ACTIVE_CONNS_LIST" ]; then + info "备份中的活动连接:" + while IFS=: read -r name type uuid device; do + info " - $name ($type) -> $device" + done < "$real_backup_dir/$ACTIVE_CONNS_LIST" + fi + + # 尝试从系统连接文件恢复 + local sys_backup_dir="$real_backup_dir/system-connections" + if [ -d "$sys_backup_dir" ] && [ "$(ls -A "$sys_backup_dir" 2>/dev/null)" ]; then + log "发现系统连接文件备份,尝试恢复..." + restore_from_system_files "$sys_backup_dir" + else + log "未找到系统连接文件,尝试从详细配置恢复..." + restore_from_details "$real_backup_dir" + fi + + # 重新激活之前的连接 + log "正在重新激活之前的活动连接..." + if [ -f "$real_backup_dir/$ACTIVE_CONNS_LIST" ]; then + while IFS=: read -r conn_name conn_type conn_uuid conn_device; do + if [ -n "$conn_name" ]; then + info "尝试激活: $conn_name" + if nmcli connection up "$conn_name" >/dev/null 2>&1; then + info "✓ 成功激活: $conn_name" + else + log_warn "激活失败: $conn_name" + fi + fi + done < "$real_backup_dir/$ACTIVE_CONNS_LIST" + fi + + log "等待网络重新连接 (8秒)..." + sleep 8 + log_success "恢复过程完成!" + check_status +} + +# 从系统文件恢复 +restore_from_system_files() { + local sys_backup_dir="\$1" + local system_conn_dir="/etc/NetworkManager/system-connections" + + # 停止NetworkManager + log "临时停止NetworkManager服务..." + systemctl stop NetworkManager + + # 备份当前配置 + local current_backup="/tmp/nm_current_backup_$(date +%s)" + mkdir -p "$current_backup" + if [ -d "$system_conn_dir" ]; then + cp -r "$system_conn_dir"/* "$current_backup/" 2>/dev/null || true + fi + + # 恢复配置文件 + mkdir -p "$system_conn_dir" + cp -r "$sys_backup_dir"/* "$system_conn_dir/" 2>/dev/null + chmod -R 600 "$system_conn_dir"/* 2>/dev/null + + # 重启NetworkManager + log "重新启动NetworkManager服务..." + systemctl start NetworkManager + sleep 5 + nmcli connection reload + sleep 3 + + rm -rf "$current_backup" +} + +# 从详细配置恢复(显示信息供手动配置) +restore_from_details() { + local backup_dir="\$1" + local details_dir="$backup_dir/$CONNECTION_DETAILS_DIR" + + if [ ! -d "$details_dir" ]; then + log_error "未找到详细配置备份" + return 1 + fi + + log_warn "系统连接文件备份不可用,显示配置信息供参考:" + + for detail_file in "$details_dir"/*.conf; do + if [ -f "$detail_file" ]; then + local filename=$(basename "$detail_file" .conf) + info "连接配置: $filename" + echo "----------------------------------------" + + # 提取关键配置信息 + grep -E "^(connection\.|ipv4\.|ipv6\.|802-3-ethernet\.|wifi\.)" "$detail_file" | head -20 + echo "----------------------------------------" + fi + done +} + +# 5. 清理临时DHCP连接 +cleanup_temp_connections() { + log "正在清理临时DHCP连接..." + local cleanup_count=0 + + while IFS= read -r conn_name; do + if [ -n "$conn_name" ]; then + if nmcli connection delete "$conn_name" >/dev/null 2>&1; then + info "已删除临时连接: $conn_name" + ((cleanup_count++)) + fi + fi + done < <(nmcli -t -f NAME connection show | grep "^temp-dhcp-") + + if [ "$cleanup_count" -gt 0 ]; then + log_success "清理完成,共删除 $cleanup_count 个临时连接。" + else + log "没有找到需要清理的临时连接。" + fi +} + +# 6. 显示备份信息 +show_backup_info() { + info "--- 备份信息 ---" + if [ ! -d "$BACKUP_BASE_DIR" ]; then + log_warn "备份目录不存在: $BACKUP_BASE_DIR" + return + fi + + local backup_count=0 + for backup_dir in "$BACKUP_BASE_DIR"/20*; do + if [ -d "$backup_dir" ]; then + ((backup_count++)) + local dir_name=$(basename "$backup_dir") + local size=$(du -sh "$backup_dir" 2>/dev/null | cut -f1) + info "备份 #$backup_count: $dir_name (大小: $size)" + + # 显示备份内容摘要 + if [ -f "$backup_dir/$ACTIVE_CONNS_LIST" ]; then + local conn_count=$(wc -l < "$backup_dir/$ACTIVE_CONNS_LIST") + info " - 活动连接: $conn_count 个" + fi + + if [ -d "$backup_dir/$CONNECTION_DETAILS_DIR" ]; then + local detail_count=$(ls -1 "$backup_dir/$CONNECTION_DETAILS_DIR"/*.conf 2>/dev/null | wc -l) + info " - 详细配置: $detail_count 个" + fi + fi + done + + if [ "$backup_count" -eq 0 ]; then + log_warn "没有找到任何备份。" + else + info "总共找到 $backup_count 个备份。" + + # 显示最新备份信息 + if [ -L "$BACKUP_BASE_DIR/latest" ]; then + local latest_backup=$(readlink -f "$BACKUP_BASE_DIR/latest") + info "最新备份: $(basename "$latest_backup")" + fi + fi +} + +# 7. 删除旧备份 +cleanup_old_backups() { + local keep_days=7 + log "正在清理超过 $keep_days 天的旧备份..." + + if [ ! -d "$BACKUP_BASE_DIR" ]; then + log_warn "备份目录不存在,无需清理。" + return + fi + + local deleted_count=0 + find "$BACKUP_BASE_DIR" -maxdepth 1 -type d -name "20*" -mtime +$keep_days | while read -r old_backup; do + if [ -d "$old_backup" ]; then + local backup_name=$(basename "$old_backup") + rm -rf "$old_backup" + info "已删除旧备份: $backup_name" + ((deleted_count++)) + fi + done + + if [ "$deleted_count" -gt 0 ]; then + log_success "清理完成,删除了 $deleted_count 个旧备份。" + else + log "没有找到需要清理的旧备份。" + fi +} + +# 8. 高级网络诊断 +advanced_diagnosis() { + info "--- 高级网络诊断 ---" + + log "1. NetworkManager 服务状态:" + systemctl status NetworkManager --no-pager -l + + log "\n2. 网络设备详细信息:" + nmcli device show + + log "\n3. 所有连接配置:" + nmcli connection show + + log "\n4. 路由表:" + ip route show table all + + log "\n5. DNS 配置:" + cat /etc/resolv.conf + + log "\n6. 防火墙状态:" + if command -v ufw >/dev/null 2>&1; then + ufw status verbose + elif command -v iptables >/dev/null 2>&1; then + iptables -L -n + else + info "未找到防火墙工具" + fi + + log "\n7. 网络接口统计:" + cat /proc/net/dev + + log "\n8. 系统网络配置文件:" + info "NetworkManager 主配置:" + [ -f /etc/NetworkManager/NetworkManager.conf ] && cat /etc/NetworkManager/NetworkManager.conf + + log "\n9. 最近的网络日志:" + journalctl -u NetworkManager --no-pager -n 50 +} + +# --- 主菜单和程序入口 --- + +show_menu() { + echo + echo "==============================================" + echo " Arch Linux NetworkManager 管理工具" + echo "==============================================" + echo "1. 检查网络状态" + echo "2. 备份网络配置" + echo "3. 自动修复网络" + echo "4. 恢复网络配置" + echo "5. 清理临时连接" + echo "6. 显示备份信息" + echo "7. 清理旧备份" + echo "8. 高级网络诊断" + echo "9. 退出" + echo "==============================================" + echo -n "请选择操作 (1-9): " +} + +main() { + # 初始化 + pre_check + mkdir -p "$BACKUP_BASE_DIR" + touch "$LOG_FILE" + + log_success "NetworkManager 管理脚本启动成功" + + while true; do + show_menu + read -r choice + + case $choice in + 1) + echo + log "执行选项 1: 检查网络状态" + check_status + ;; + 2) + echo + log "执行选项 2: 备份网络配置" + backup_config + ;; + 3) + echo + log "执行选项 3: 自动修复网络" + auto_fix + ;; + 4) + echo + log "执行选项 4: 恢复网络配置" + restore_config + ;; + 5) + echo + log "执行选项 5: 清理临时连接" + cleanup_temp_connections + ;; + 6) + echo + log "执行选项 6: 显示备份信息" + show_backup_info + ;; + 7) + echo + log "执行选项 7: 清理旧备份" + cleanup_old_backups + ;; + 8) + echo + log "执行选项 8: 高级网络诊断" + advanced_diagnosis + ;; + 9) + echo + log_success "感谢使用 NetworkManager 管理工具!" + exit 0 + ;; + *) + echo + log_error "无效选择,请输入 1-9 之间的数字。" + ;; + esac + + echo + echo "按 Enter 键继续..." + read -r + done +} + +# 脚本入口点 +if [ "${BASH_SOURCE[0]}" = "${0}" ]; then + main "$@" +fi + diff --git a/tms-bbt-conifg/smart-organizer-service-install.sh b/tms-bbt-conifg/smart-organizer-service-install.sh new file mode 100644 index 0000000..5926c9b --- /dev/null +++ b/tms-bbt-conifg/smart-organizer-service-install.sh @@ -0,0 +1,94 @@ +#!/usr/bin/env bash + +SOFT_PATH="/home/smart" +SOFT_NAME="SmartOrganizer" +SERVICE_SCRIPT="SOService" +SERVICE_NAME="SOS" +#https://bbt-static-beta.oss-cn-beijing.aliyuncs.com/smart/organizer/SmartOrganizer.zip +wget -q --no-check-certificate "https://bbt-static-beta.oss-cn-beijing.aliyuncs.com/smart/organizer/SmartOrganizer.zip" -O ${SOFT_PATH}/${SOFT_NAME}.zip +#cp -r -f /home/smart/install8.5/SmartOrganizer /home/smart/ + +if [[ -z ${SOFT_PATH}/${SOFT_NAME}.zip ]]; then + echo "Download failed!" + exit 2 +fi + +echo "Download successed" + +unzip -o -qq ${SOFT_PATH}/${SOFT_NAME}.zip -d ${SOFT_PATH}/${SOFT_NAME} +echo "Unpacking..." +chmod 700 ${SOFT_PATH}/${SOFT_NAME}/SO* +chmod 700 ${SOFT_PATH}/${SOFT_NAME}/bin/* +chmod 700 ${SOFT_PATH}/${SOFT_NAME}/common/*/* +chmod 700 ${SOFT_PATH}/${SOFT_NAME}/scripts/* +mkdir -p ${SOFT_PATH}/${SOFT_NAME}/downloads ${SOFT_PATH}/${SOFT_NAME}/tasks +chmod 777 ${SOFT_PATH}/${SOFT_NAME}/downloads ${SOFT_PATH}/${SOFT_NAME}/tasks +rm -f ${SOFT_PATH}/${SOFT_NAME}.zip +echo "DONE!" +echo "Remove source package" + +if [[ -f ${SOFT_PATH}/${SOFT_NAME}/init.sh ]];then + echo "Initializing..." + /bin/bash ${SOFT_PATH}/${SOFT_NAME}/init.sh + rm -f ${SOFT_PATH}/${SOFT_NAME}/init.sh + echo "Initialize Completed!" +fi + +if [[ -f ${SOFT_PATH}/${SOFT_NAME}/upgrade.sh ]];then + rm -f ${SOFT_PATH}/${SOFT_NAME}/upgrade.sh + echo "Unused script clear Completed!" +fi + +# service and restart + +getSystemVersion() +{ + releasetmp=`cat /etc/redhat-release | awk -Frelease '{print $2}' | awk -F. '{print $1}' | awk '{print $1}'` + echo $releasetmp +} + +syncSoftwareStatus() +{ + hostname=$(hostname) + name="SmartOrganizer" + version=$(cat ${SOFT_PATH}/${SOFT_NAME}/.version) + echo "Sync software status: ${hostname}:${name}:${version}" + curl -sS -D /dev/null -o /dev/null -H "hostname:${hostname}" "https://c.baobaot.com/api/software/sync_status?name=${name}&version=${version}" +} + +syncSoftwareStatus + +if [[ $(getSystemVersion) -eq 6 ]]; then + echo "current system version is 6" + service SOS stop + rm -f /etc/init.d/${SERVICE_NAME} + ln -s ${SOFT_PATH}/${SOFT_NAME}/${SERVICE_SCRIPT} /etc/init.d/${SERVICE_NAME} + chkconfig --add ${SERVICE_NAME} + chkconfig ${SERVICE_NAME} on + service SOS start +else + echo "current system version is > 6" + systemctl stop ${SERVICE_SCRIPT} + systemctl disable ${SERVICE_SCRIPT} + rm -f /usr/lib/systemd/system/${SERVICE_SCRIPT}.service + + cat > /usr/lib/systemd/system/${SERVICE_SCRIPT}.service </dev/null 2>&1; then + log_success "外网连接正常 (Google DNS 8.8.8.8)" + elif ping -c 3 -W 3 1.1.1.1 >/dev/null 2>&1; then + log_success "外网连接正常 (Cloudflare DNS 1.1.1.1)" + elif ping -c 3 -W 3 114.114.114.114 >/dev/null 2>&1; then + log_success "外网连接正常 (114 DNS)" + else + log_error "外网连接失败" + return 1 + fi + + # 检查DNS解析 + log_info "测试DNS解析..." + if nslookup baidu.com >/dev/null 2>&1; then + log_success "DNS解析正常" + else + log_warn "DNS解析可能有问题" + fi +} + +# 3. 下载并运行TMS工具 +run_tms_tool() { + print_separator + log_info "启动TMS工具..." + print_separator + + cd "$SCRIPT_DIR" || { + log_error "无法切换到目录: $SCRIPT_DIR" + return 1 + } + + log_info "正在下载最新版本的TMS工具..." + if wget -N "$TMS_URL" -O "$TMS_SCRIPT"; then + log_success "TMS工具下载成功" + + # 检查文件是否存在且可执行 + if [ -f "$TMS_SCRIPT" ]; then + chmod +x "$TMS_SCRIPT" + log_info "正在运行TMS工具..." + sh "$TMS_SCRIPT" + else + log_error "下载的TMS工具文件不存在" + return 1 + fi + else + log_error "TMS工具下载失败" + log_info "请检查网络连接或URL是否正确: $TMS_URL" + return 1 + fi +} + +# 5. 一键执行(原脚本功能) +one_click_run() { + print_separator + log_info "执行一键流程..." + print_separator + + # 1. 外网检测 + log_info "步骤1: 外网检测" + if ! quick_network_check; then + log_warn "网络检测发现问题,是否继续? [y/N]" + read -r continue_choice + if [[ ! "$continue_choice" =~ ^[Yy]$ ]]; then + log_info "用户取消操作" + return 1 + fi + fi + + echo + # 2. 运行TMS工具 + log_info "步骤2: 运行TMS工具" + run_tms_tool + + print_separator + log_success "一键流程执行完成" +} + +# 6. 显示系统信息 +show_system_info() { + print_separator + log_info "系统信息" + print_separator + + neofetch + + echo -e "\n${C_BLUE}网络接口:${C_RESET}" + ip link show | grep -E "^[0-9]+:" | sed 's/^/ /' + + echo -e "\n${C_BLUE}脚本目录:${C_RESET}" + echo " $SCRIPT_DIR" + + echo -e "\n${C_BLUE}脚本文件状态:${C_RESET}" + if [ -f "$SCRIPT_DIR/$NM_SCRIPT" ]; then + echo -e " 网络管理脚本: ${C_GREEN}存在${C_RESET}" + else + echo -e " 网络管理脚本: ${C_RED}不存在${C_RESET}" + fi + + if [ -f "$SCRIPT_DIR/$TMS_SCRIPT" ]; then + echo -e " TMS工具脚本: ${C_GREEN}存在${C_RESET}" + echo " 最后修改: $(stat -c %y "$SCRIPT_DIR/$TMS_SCRIPT" 2>/dev/null | cut -d. -f1)" + else + echo -e " TMS工具脚本: ${C_YELLOW}未下载${C_RESET}" + fi +} + +# --- 菜单显示 --- +show_menu() { + clear + print_header + + echo -e "${C_YELLOW}请选择操作:${C_RESET}" + echo + echo " 1. 外网检测和网络管理" + echo " 2. 快速网络状态检查" + echo " 3. 下载并运行TMS工具" + echo " 4. 一键执行 (检测+TMS)" + echo " 5. 显示系统信息" + echo " 0. 退出" + echo + print_separator + read -rp "请输入选择 [0-6]: " choice +} + +# --- 主函数 --- +main() { + # 环境检查 + check_environment + + while true; do + show_menu + + case $choice in + 1) + network_check + ;; + 2) + quick_network_check + ;; + 3) + run_tms_tool + ;; + 4) + one_click_run + ;; + 5) + show_system_info + ;; + 0) + print_separator + log_success "感谢使用TMS工具集成菜单!" + exit 0 + ;; + *) + log_error "无效选择,请输入 0-6 之间的数字" + ;; + esac + + echo + read -p "按回车键继续..." -r + done +} + +# --- 脚本入口 --- +main "$@" diff --git a/tms-bbt-conifg/unzipKDM.png b/tms-bbt-conifg/unzipKDM.png new file mode 100644 index 0000000..686bd41 Binary files /dev/null and b/tms-bbt-conifg/unzipKDM.png differ diff --git a/tms-bbt-conifg/unzipKDMs.sh b/tms-bbt-conifg/unzipKDMs.sh new file mode 100644 index 0000000..997b623 --- /dev/null +++ b/tms-bbt-conifg/unzipKDMs.sh @@ -0,0 +1,58 @@ +#!/bin/bash + +# 定义保存编码的文件路径 +CONFIG_FILE="$HOME/.my_key_encoding" # 建议放在用户主目录下的隐藏文件,避免与脚本混淆 + +# 检查是否存在已保存的编码 +if [ -f "$CONFIG_FILE" ]; then + # 如果文件存在,读取编码 + KEY_ENCODING=$(cat "$CONFIG_FILE") + echo "使用已保存的密钥编码: $KEY_ENCODING" +else + # 如果文件不存在,提示用户输入并保存 + read -p "首次运行,请输入密钥编码 (例如: 35054321): " USER_INPUT_ENCODING + + # 简单验证输入是否为空 + if [ -z "$USER_INPUT_ENCODING" ]; then + echo "错误: 未输入密钥编码。脚本退出。" + exit 1 + fi + + KEY_ENCODING="$USER_INPUT_ENCODING" + echo "$KEY_ENCODING" > "$CONFIG_FILE" + echo "密钥编码 '$KEY_ENCODING' 已保存,下次运行将自动使用此编码。" +fi + +# 开始解压操作 +echo "开始解压文件..." + +cd /home/smart/下载/ || { echo "错误: 无法进入 /home/smart/下载/ 目录。"; exit 1; } +ls *.zip 2>/dev/null | xargs -r -n1 unzip -o -d /media/kdm/ +echo "已处理 /home/smart/下载/ 中的ZIP文件。" + +cd /home/smart/Downloads/ || { echo "错误: 无法进入 /home/smart/Downloads/ 目录。"; exit 1; } +ls *.zip 2>/dev/null | xargs -r -n1 unzip -o -d /media/kdm/ +echo "已处理 /home/smart/Downloads/ 中的ZIP文件。" + +cd /media/kdm/ || { echo "错误: 无法进入 /media/kdm/ 目录。"; exit 1; } +ls *.zip 2>/dev/null | xargs -r -n1 unzip -o -d /media/kdm/ +echo "已处理 /media/kdm/ 中的ZIP文件。" + +echo "解压操作完成。" + +echo "删除密钥压缩包..." +# 使用之前获取或保存的 KEY_ENCODING 变量 +find /media/kdm/ -name "${KEY_ENCODING}*.zip" -delete +find /home/smart/下载/ -name "${KEY_ENCODING}*.zip" -delete +find /home/smart/Downloads/ -name "${KEY_ENCODING}*.zip" -delete +echo "密钥压缩包删除完成。" + +sleep 3 +echo "刷新密钥..." +# 登录并刷新密钥,保持原样 +curl -X POST -d 'userName=admin&userPassword=admin' -c /home/smart/cookie.txt http://127.0.0.1:8080/SmartTMS_S3/LoginController/login.do 2>&1 >/dev/null +curl http://127.0.0.1:8080/SmartTMS_S3/kdmController/updateKdm.do -X POST -b /home/smart/cookie.txt 2>&1 >/dev/null +echo "刷新成功。" +sleep 5 + +echo "脚本执行完毕。" diff --git a/tms-bbt-conifg/uzipkdm.desktop b/tms-bbt-conifg/uzipkdm.desktop new file mode 100644 index 0000000..e1e49c0 --- /dev/null +++ b/tms-bbt-conifg/uzipkdm.desktop @@ -0,0 +1,11 @@ +#!/usr/bin/env xdg-open + +[Desktop Entry] +Version=1.0 +Type=Application +Terminal=true +Icon[zh_CN]=/home/smart/unzipKDM.png +Name[zh_CN]=解压密钥 +Exec=sh /home/smart/unzipKDMs.sh +Name=unzipkdm +Icon=/home/smart/unzipKDM.png