应用程序如何在运行时判断自己是否运行于MagicLinux系统中?
本座在开发一个程序,想要在运行时判断自己是否运行于MagicLinux系统中,以便下载到对应的新版本的RPM安装包。同时需要考虑的有:
[*]CPU位数
[*]MagicLinux自身版本号
[*]日后可能对其它的发行版也打包
[*]其它发行版自身的版本号
系统里有个包叫做magic-release,其中的一个文件/etc/os-release好像可以满足这个判断要求。是否/etc/os-release是各个发行版之间通用的做法,用于标识本发行版的关键信息呢? LSB 有规定。一般说来就是你说的这个,或者是 /etc/ 里面发行版自己的特有 release 文件。 vbox安装程序有段脚本针对现有发行版部署启动脚本的代码,解开安装程序参照一下。 magic-release 应该是可以用来判断系统发行版本,但不一定能描述发行版版本,原因是之前我没有重视 magic-release,
magic-release 早前版本是用来判定是否重新执行系统初始化脚本的用的,这个在 MGC3 就没有应用了。 mgc3_setup.server 用来初始化,不过这个服务没办法由系统关闭,我也许应该沿用以前的做法,因为系统本身安全机制会忽略掉一些自动操作,比如 grub2 更新和关闭某个服务。
如果楼主想识别系统有更好的建议,我们以后的版本或许会考虑,比如添加一个脚本来返回版本号。
SE 也许更清楚识别方法,Bash 终端登录时有着完整的发行版本提示,你可以用 grep 来侦测一下 /etc 下的文件。
我能直接告知的是 /etc/default/grub 里面肯定会有版本描述。grub 启动时用的参数在 /proc 里也都能找到,这个你应该也感兴趣。 现在3.0的magic-release符合lsb标准,可以按lsb的那套来检测。 我沿用了 mgc 2.5 的做法了,把 magic-release 做为是否启动初始化设置脚本的判断依据,然后重新生成一个 magic-release,之所以这样做是因为不能够自信确保系统第一次启动后能把 mgc3_setup.server 关闭掉。
cat /usr/bin/system_setup.sh
#!/bin/bash
echo "initializing configuration setting..."
if [ ! -f /etc/magic-release ]
then
/sbin/depmod -a
/usr/sbin/fsautomount zh_CN.UTF8
/usr/sbin/grub2-update
mypci=`/usr/sbin/lspci|/usr/bin/grep VGA|/usr/bin/grep VirtualBox`
if [ "$mypci" ]
then
/usr/bin/cp /etc/X11/gpu_vesa.conf /etc/X11/xorg.conf.d/20-gpuset.conf
fi
myintel=`/usr/sbin/lspci|/usr/bin/grep VGA|/usr/bin/grep Intel\ Corporation\ 4\ Series`
if [ "$myintel" ]
then
/usr/bin/cp /etc/X11/gpu_vesa.conf /etc/X11/xorg.conf.d/20-gpuset.conf
fi
mynvidia=`/usr/sbin/lspci|/usr/bin/grep VGA|/usr/bin/grep nVidia`
if [ "$mynvidia" ]
then
/usr/bin/nvidia-modprobe
/usr/bin/nvidia-xconfig
fi
sed -i /default/'s/1 1/0 0/' /etc/fstab
echo "Magic Linux Kaibao">/etc/magic-release
这样写:Magic release 3.0 (Kaibao)。 原帖由 sejishikong 于 2014-7-3 08:35 发表 http://forum.linuxfans.org/images/common/back.gif
这样写:Magic release 3.0 (Kaibao)。
来不及改了,里面的内容我没改过,原本就是那么写的。
cat /etc/default/grub
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR="MagicLinux 3"
GRUB_DEFAULT=saved
GRUB_CMDLINE_LINUX="quiet splash"
GRUB_BACKGROUND=/boot/grub2/background.jpg
GRUB_TERMINAL_OUTPUT=gfxterm
GRUB_THEME=/boot/grub2/mytheme/theme.txt grub 是可以启动别的系统的,这样如果双 Linux 单 boot 分区,那么就只有一套 grub 配置文件,这样如果在另一套系统里面去检测 grub 的配置,那么还会识别成 mgc ,但其实 mgc 没有被启动。或者反过来,永远不能识别成 mgc 。 原帖由 jiangtao9999 于 2014-7-3 10:31 发表 http://forum.linuxfans.org/images/common/back.gif
grub 是可以启动别的系统的,这样如果双 Linux 单 boot 分区,那么就只有一套 grub 配置文件,这样如果在另一套系统里面去检测 grub 的配置,那么还会识别成 mgc ,但其实 mgc 没有被启动。或者反过来,永远不能识别成 mgc 。 ...
判断的方法有很多啊
grep -R "Magic" /proc/asound
/proc/asound/oss/sndstat:Kernel: Linux MagicLinux 3.14.7 #1 SMP Mon Jun 16 10:04:56 CST 2014 x86_64
下面这个虽然暂时没用,但也可以做点手脚
cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-3.14.7 root=UUID=edeaad69-c8ed-4a19-b238-2f8ec12786dc ro quiet splash resume=/dev/disk/by-uuid/d473b0cd-a688-4f0f-bb8c-0368eefd438d
/etc/default/grub 是个 grub2-mkconfig 的参照参数文件,它本身是发行版本固定的设置,用户修改 grub 的配置和这个无关。 grep -R "Magic" /etc
/etc/os-release:NAME=Magic
/etc/os-release:PRETTY_NAME="Magic 3.0 (Kaibao)"
/etc/yum.repos.d/all.repo:name=Magic-3.0 All
/etc/sysconfig/grub:GRUB_DISTRIBUTOR="MagicLinux 3"
/etc/default/grub:GRUB_DISTRIBUTOR="MagicLinux 3"
/etc/issue:Magic Linux Kaibao
/etc/magic:# Magic local data for file(1) command. 你所谓的这些方法很多都会被某种正常操作擦掉。
GRUB 的参数参照只是在安装了 grub 的时候才成立,如果你没赚 grub ,而是用另外一个系统的 grub 去启动。就肯定没这东西了。 原帖由 jiangtao9999 于 2014-7-3 15:02 发表 http://forum.linuxfans.org/images/common/back.gif
你所谓的这些方法很多都会被某种正常操作擦掉。
GRUB 的参数参照只是在安装了 grub 的时候才成立,如果你没赚 grub ,而是用另外一个系统的 grub 去启动。就肯定没这东西了。 ...
/etc/default/grub 是固定的,它只是一个参数引导,生成的 grub.cfg 在 /boot/grub2 下面。另一个系统去启动本系统,只要是你已经启动了本系统,那么 /etc/default/grub 也肯定是本系统的设置。
如果用本系统 grub 去引导其它系统修改了 grub.cfg,但没人刻意去修改 /etc/default/grub,也不构成影响啊。 真不是固定的。这东西应该只在安装了 grub 后才有。而 grub 只不过是 linux 的一个引导程序,这东西是可以换别的的。
而且修改这个东西很正常,每次升级内核就要修改配置文件的时候,你肯定更希望修改这个东西来减少不必要的修改。 别自己又开始独出心裁好吗?
LSB 有相关规定,你就照着执行会要你命吗?
你非要和别人不兼容才爽?
页:
[1]