[Share Experiences] 打包 deb 的一个实例
Tofloor
poster avatar
酷谷的谷子
deepin
2023-06-23 01:26
Author

打包 deb 的一个实例 CONKY 插件脚本 CONKY.zip

解压到桌面 右键点击桌面 打开终端输入 dpkg-deb -b CONKY cn.i8520.conky.deb

安装 sudo dpkg -i cn.i8520.conky.deb -y 或者 sudo apt install ./cn.i8520.conky.deb -y

安装好以后 reboot 重启系统

应为有一个桌面启动器文件,需要复制到家目录的 /home/用户名/.config/autostart

因为deb安装的时候DEBIAN下的脚本都是ROOT权限执行的也就是 $USER = root 而不是 $USER = 用户名

就变成了/root/.config/autostart而不是/home/用户名/.config/autostart

获取当前登入用户名的另外一种写法 这个更简单一点

#!/bin/bash
NAME_ID=`getent passwd ${SUDO_UID:-$(id -u)} | cut -d: -f 6`
MY_USER_DIR="${NAME_ID}"
MY_USER_NAME="${MY_USER_DIR##*/}"
echo '显示当前登入用户路径'
echo ${MY_USER_DIR}
echo '--------------------------'
echo '显示当前登入用户名'
echo ${MY_USER_NAME}
echo '--------------------------'
echo "当root执行\$USER = root"
echo "当用户执行\$USER = 用户名"
MY_ROOT_NAME='root'
if [[ ! X${MY_ROOT_NAME} = X${USER} ]];then
   # 在用户下的操作
   echo "1. $USER"
else
   # 在root下的操作
   echo "2. $USER"  
fi
echo '--------------------------'
echo "有用户的情况下,且需要操作用户目录,这个使用就要主要归属和群组的问题"
echo "在执行直接执行 chmod 755 的时候其实是root下的chmod 755"
echo "需要这样执行"
# chown 用户名 文件或文件夹的路径
# chgrp 用户名 文件或文件夹的路径
echo "123" > ${MY_USER_DIR}/123
echo "[归属]为当前用户:${MY_USER_NAME}"
echo 'chown ${MY_USER_NAME} ${MY_USER_DIR}/123'
chown ${MY_USER_NAME} ${MY_USER_DIR}/123
echo "[群组]为当前用户:${MY_USER_NAME}"
echo '${MY_USER_NAME} ${MY_USER_DIR}/123'
chgrp ${MY_USER_NAME} ${MY_USER_DIR}/123
echo '--------------------------'
echo "没有用户的情况下"
echo -e "在root下 直接执行 chmod 755 给文件或文件夹加权限不用考虑归属和群组\n但是/www 目录的时候需要主要"

怎么得到当前用户名?简单就是 cd /home/*/桌面 然后pwd 打印一下当前路径,截取字符串

截取字符串的笔记 https://note.youdao.com/s/LRSAIUR4

还有一个问题就是 需要把一些文件的归属者、群组设置成当前用户

# 假设 用户名是 ${MY_USER}
# chown 用户名 文件路径或文件夹路径
# chgrp 用户名 文件路径或文件夹路径
# 归属
chown ${MY_USER} /home/${MY_USER}/conkyrcXX.desktop
群组
chgrp ${MY_USER} /home/${MY_USER}/conkyrcXX.desktop

下面贴一下DEBIAN下的配置文件

DEBIAN/control

Package:后面是 实际上的包名 Version:后面是版本 Depends:后面是依赖项

Maintainer:后面是作者信息 Description:后面是软件包说明

Package: cn.i8520.conky
Version: 0.1
Prioritt: optional
Architecture: amd64
Installed-Size: 8
Depends: wget,conky-all
Maintainer: [i8520 <123.@123.com>]
Description: 基于conky的插件脚本

DEBIAN/postinst

#!/bin/bash
set -e
mkdir -p /tmp/CN-i8520-MILLET
MY_TMP='/tmp/CN-i8520-MILLET'

#----------------------------
# 判断系统是否是服务器,服务器一般不会有桌面文件夹.
# 间接 区分root和用户
#----------------------------
MY_USER_U_NED_R(){
A='/home/*/桌面'
B='/home/*/Desktop'
cd ${A} 2>/dev/null
if [ $? -ne 0 ]; then
   cd ${B} 2>/dev/null
     if [ $? -ne 0 ]; then
       echo "/root"
     else
       MY_USER=$(echo `pwd`)
       echo ${MY_USER%/*}
     fi
else
   MY_USER=$(echo `pwd`)
   echo ${MY_USER%/*}
fi
}
MY_USER_U_NED_R  > ${MY_TMP}/MY_USER_DIR.TXT
#--------------------------------
# 定义用户路径 和用户名
# /home/用户/.config/autostart开机执行起动器文件
#--------------------------------
MY_ROOT_DIR='/root'
MY_USER_DIR=`cat ${MY_TMP}/MY_USER_DIR.TXT`
MY_USER="${MY_USER_DIR##*/}"
MY_CONKY_DIR="${MY_USER_DIR}/.config/autostart"
#--------------------------------
# 在用户下的操作
#--------------------------------
MY_USER_U(){

   if [ ! -d "${MY_CONKY_DIR}" ]
   then
   mkdir -p ${MY_CONKY_DIR}
   #这个脚本是在ROOT执行的所以需要修改权限
   chown ${MY_USER} ${MY_CONKY_DIR}
   chgrp ${MY_USER} ${MY_CONKY_DIR}
   fi
   #+------------------------------
   CONKY_SH_DIR='/opt/CN-i8520-MILLET/cn.i8520.conky'
   chmod 755 ${CONKY_SH_DIR}
   chown ${MY_USER} ${CONKY_SH_DIR}
   chgrp ${MY_USER} ${CONKY_SH_DIR}
   chown ${MY_USER} ${CONKY_SH_DIR}/*
   chgrp ${MY_USER} ${CONKY_SH_DIR}/*
   cp -r /opt/CN-i8520-MILLET/cn.i8520.conky/conkyrcXX.desktop ${MY_CONKY_DIR}
   echo "修改${MY_CONKY_DIR}/conkyrcXX.desktop的权限为755"
   echo "修改文件属性${MY_CONKY_DIR}/conkyrcXX.desktop为"
   echo "[归属]为当前用户:${MY_USER}"
   chown ${MY_USER} ${MY_CONKY_DIR}/conkyrcXX.desktop
   echo "[群组]为当前用户:${MY_USER}"
   chgrp ${MY_USER} ${MY_CONKY_DIR}/conkyrcXX.desktop
   bash /opt/CN-i8520-MILLET/cn.i8520.conky/ConkyrcFile.sh
   #+------------------------------
   #/tmp/CN-i8520-MILLET
   rm -rf ${MY_TMP}
}
#--------------------------------
# 在root下的操作
#--------------------------------
MY_USER_R(){

   chmod 755 /opt/CN-i8520-MILLET/cn.i8520.conky
   cp -r /opt/CN-i8520-MILLET/cn.i8520.conky/conky-X /etc/profile.d
   bash /opt/CN-i8520-MILLET/cn.i8520.conky/ConkyrcFile.sh
   #+------------------------------
   # /tmp/CN-i8520-MILLET
   rm -rf ${MY_TMP}
   
}
#--------------------------------
# 根据自定义函数 MY_USER_U_NED_R 的输出
# 输出为 /home/用户 就是系统管理员,没有ROOT权限
# 输出为 /root     超级管理员权限,有ROOT权限
#--------------------------------

if [[ ! X${MY_ROOT_DIR} = X${MY_USER_DIR} ]];then
   # 在用户下的操作
   MY_USER_U
else
   # 在root下的操作
   MY_USER_R
fi
exit 0

DEBIAN/postrm

#!/bin/bash
set -e
mkdir -p /tmp/CN-i8520-MILLET
MY_TMP='/tmp/CN-i8520-MILLET'

#----------------------------
# 判断系统是否是服务器,服务器一般不会有桌面文件夹.
# 间接 区分root和用户
#----------------------------
MY_USER_U_NED_R(){
A='/home/*/桌面'
B='/home/*/Desktop'
cd ${A} 2>/dev/null
if [ $? -ne 0 ]; then
   cd ${B} 2>/dev/null
     if [ $? -ne 0 ]; then
       echo "/root"
     else
       MY_USER=$(echo `pwd`)
       echo ${MY_USER%/*}
     fi
else
   MY_USER=$(echo `pwd`)
   echo ${MY_USER%/*}
fi
}
MY_USER_U_NED_R  > ${MY_TMP}/MY_USER_DIR.TXT
#--------------------------------
# 定义用户路径 和用户名
# /home/用户/.config/autostart开机执行起动器文件
#--------------------------------
MY_ROOT_DIR='/root'
MY_USER_DIR=`cat ${MY_TMP}/MY_USER_DIR.TXT`
MY_USER="${MY_USER_DIR##*/}"
MY_CONKY_DIR="${MY_USER_DIR}/.config/autostart"
#--------------------------------
# 在用户下的操作
#--------------------------------
MY_USER_U(){
   
   echo "删除卸载残留"
   rm -rf ${MY_CONKY_DIR}/conkyrcXX.desktop
   rm -rf ${MY_USER_DIR}/.conkyrc
   rm -rf /opt/CN-i8520-MILLET/cn.i8520.conky/wk.txt
   rm -rf /root/.conkyrc
   rm -rf /tmp/URL_LINK

}
#--------------------------------
# 在root下的操作
#--------------------------------
MY_USER_R(){
   
   echo "删除卸载残留"
   rm -rf /etc/profile.d/conky-X
   rm -rf /root/.conkyrc
   rm -rf /opt/CN-i8520-MILLET/cn.i8520.conky/wk.txt
   rm -rf /tmp/URL_LINK

}
#--------------------------------
# 根据自定义函数 MY_USER_U_NED_R 的输出
# 输出为 /home/用户 就是系统管理员,没有ROOT权限
# 输出为 /root     超级管理员权限,有ROOT权限
#--------------------------------

if [[ ! X${MY_ROOT_DIR} = X${MY_USER_DIR} ]];then
   # 在用户下的操作
   if [[ ! -f ${MY_CONKY_DIR}/conkyrcXX.desktop ]];then
       echo "OK"
     else
       MY_USER_U
   fi
else
   # 在root下的操作
   if [[ ! -f /etc/profile.d/conky-X ]];then
       echo "OK"
     else
       MY_USER_R
   fi
fi
exit 0

Reply Favorite View the author
All Replies
阿尼樱奈奈
deepin
2023-06-23 01:31
#1

like

Reply View the author
蔡EEPIN
deepin
2023-06-23 01:59
#2

不明觉厉

Reply View the author
hanzn-zzx
deepin
2023-06-23 03:20
#3

like学习了!

Reply View the author
donaldsebleung
deepin
2023-06-23 17:44
#4

感谢分享kissing_heart

Reply View the author
zizdong
deepin
Forum Operations
2023-06-28 00:52
#5

有没兴趣来给人培训打包哈哈

Reply View the author