hxcan 发表于 2014-6-28 13:10:11

应用程序如何在运行时判断自己是否运行于MagicLinux系统中?

本座在开发一个程序,想要在运行时判断自己是否运行于MagicLinux系统中,以便下载到对应的新版本的RPM安装包。
同时需要考虑的有:

[*]CPU位数
[*]MagicLinux自身版本号
[*]日后可能对其它的发行版也打包
[*]其它发行版自身的版本号


系统里有个包叫做magic-release,其中的一个文件/etc/os-release好像可以满足这个判断要求。是否/etc/os-release是各个发行版之间通用的做法,用于标识本发行版的关键信息呢?

jiangtao9999 发表于 2014-6-28 16:52:54

LSB 有规定。一般说来就是你说的这个,或者是 /etc/ 里面发行版自己的特有 release 文件。

huizige 发表于 2014-6-28 22:08:20

vbox安装程序有段脚本针对现有发行版部署启动脚本的代码,解开安装程序参照一下。

haulm 发表于 2014-7-2 13:24:37

magic-release 应该是可以用来判断系统发行版本,但不一定能描述发行版版本,原因是之前我没有重视 magic-release,
magic-release 早前版本是用来判定是否重新执行系统初始化脚本的用的,这个在 MGC3 就没有应用了。 mgc3_setup.server 用来初始化,不过这个服务没办法由系统关闭,我也许应该沿用以前的做法,因为系统本身安全机制会忽略掉一些自动操作,比如 grub2 更新和关闭某个服务。
如果楼主想识别系统有更好的建议,我们以后的版本或许会考虑,比如添加一个脚本来返回版本号。
SE 也许更清楚识别方法,Bash 终端登录时有着完整的发行版本提示,你可以用 grep 来侦测一下 /etc 下的文件。
我能直接告知的是 /etc/default/grub 里面肯定会有版本描述。grub 启动时用的参数在 /proc 里也都能找到,这个你应该也感兴趣。

sejishikong 发表于 2014-7-2 14:35:13

现在3.0的magic-release符合lsb标准,可以按lsb的那套来检测。

haulm 发表于 2014-7-3 00:17:58

我沿用了 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

sejishikong 发表于 2014-7-3 08:35:40

这样写:Magic release 3.0 (Kaibao)。

haulm 发表于 2014-7-3 09:53:51

原帖由 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

jiangtao9999 发表于 2014-7-3 10:31:03

grub 是可以启动别的系统的,这样如果双 Linux 单 boot 分区,那么就只有一套 grub 配置文件,这样如果在另一套系统里面去检测 grub 的配置,那么还会识别成 mgc ,但其实 mgc 没有被启动。或者反过来,永远不能识别成 mgc 。

haulm 发表于 2014-7-3 11:13:49

原帖由 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 的配置和这个无关。

haulm 发表于 2014-7-3 11:18:05

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.

jiangtao9999 发表于 2014-7-3 15:02:33

你所谓的这些方法很多都会被某种正常操作擦掉。
GRUB 的参数参照只是在安装了 grub 的时候才成立,如果你没赚 grub ,而是用另外一个系统的 grub 去启动。就肯定没这东西了。

haulm 发表于 2014-7-3 23:10:18

原帖由 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,也不构成影响啊。

jiangtao9999 发表于 2014-7-3 23:53:50

真不是固定的。这东西应该只在安装了 grub 后才有。而 grub 只不过是 linux 的一个引导程序,这东西是可以换别的的。
而且修改这个东西很正常,每次升级内核就要修改配置文件的时候,你肯定更希望修改这个东西来减少不必要的修改。

jiangtao9999 发表于 2014-7-3 23:55:23

别自己又开始独出心裁好吗?
LSB 有相关规定,你就照着执行会要你命吗?
你非要和别人不兼容才爽?
页: [1]
查看完整版本: 应用程序如何在运行时判断自己是否运行于MagicLinux系统中?