QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5585|回复: 14

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

[复制链接]
发表于 2014-6-28 13:10:11 | 显示全部楼层 |阅读模式
本座在开发一个程序,想要在运行时判断自己是否运行于MagicLinux系统中,以便下载到对应的新版本的RPM安装包。
同时需要考虑的有:
  • CPU位数
  • MagicLinux自身版本号
  • 日后可能对其它的发行版也打包
  • 其它发行版自身的版本号


系统里有个包叫做magic-release,其中的一个文件/etc/os-release好像可以满足这个判断要求。是否/etc/os-release是各个发行版之间通用的做法,用于标识本发行版的关键信息呢?
发表于 2014-6-28 16:52:54 | 显示全部楼层
LSB 有规定。一般说来就是你说的这个,或者是 /etc/ 里面发行版自己的特有 release 文件。
回复

使用道具 举报

发表于 2014-6-28 22:08:20 | 显示全部楼层
vbox安装程序有段脚本针对现有发行版部署启动脚本的代码,解开安装程序参照一下。
回复

使用道具 举报

发表于 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 里也都能找到,这个你应该也感兴趣。
回复

使用道具 举报

发表于 2014-7-2 14:35:13 | 显示全部楼层
现在3.0的magic-release符合lsb标准,可以按lsb的那套来检测。
回复

使用道具 举报

发表于 2014-7-3 00:17:58 | 显示全部楼层
我沿用了 mgc 2.5 的做法了,把 magic-release 做为是否启动初始化设置脚本的判断依据,然后重新生成一个 magic-release,之所以这样做是因为不能够自信确保系统第一次启动后能把 mgc3_setup.server 关闭掉。

  1. cat /usr/bin/system_setup.sh
  2. #!/bin/bash
  3. echo "initializing configuration setting..."
  4. if [ ! -f /etc/magic-release ]
  5. then
  6.     /sbin/depmod -a
  7.     /usr/sbin/fsautomount zh_CN.UTF8
  8.     /usr/sbin/grub2-update
  9.     mypci=`/usr/sbin/lspci|/usr/bin/grep VGA|/usr/bin/grep VirtualBox`
  10.     if [ "$mypci" ]
  11.     then
  12.     /usr/bin/cp /etc/X11/gpu_vesa.conf /etc/X11/xorg.conf.d/20-gpuset.conf
  13.     fi
  14.     myintel=`/usr/sbin/lspci|/usr/bin/grep VGA|/usr/bin/grep Intel\ Corporation\ 4\ Series`
  15.     if [ "$myintel" ]
  16.     then
  17.     /usr/bin/cp /etc/X11/gpu_vesa.conf /etc/X11/xorg.conf.d/20-gpuset.conf
  18.     fi
  19.     mynvidia=`/usr/sbin/lspci|/usr/bin/grep VGA|/usr/bin/grep nVidia`
  20.     if [ "$mynvidia" ]
  21.     then
  22.     /usr/bin/nvidia-modprobe
  23.     /usr/bin/nvidia-xconfig
  24.     fi
  25.     sed -i /default/'s/1             1/0             0/' /etc/fstab
  26.     echo "Magic Linux Kaibao">/etc/magic-release
复制代码
回复

使用道具 举报

发表于 2014-7-3 08:35:40 | 显示全部楼层
这样写:Magic release 3.0 (Kaibao)。
回复

使用道具 举报

发表于 2014-7-3 09:53:51 | 显示全部楼层
原帖由 sejishikong 于 2014-7-3 08:35 发表
这样写: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
回复

使用道具 举报

发表于 2014-7-3 10:31:03 | 显示全部楼层
grub 是可以启动别的系统的,这样如果双 Linux 单 boot 分区,那么就只有一套 grub 配置文件,这样如果在另一套系统里面去检测 grub 的配置,那么还会识别成 mgc ,但其实 mgc 没有被启动。或者反过来,永远不能识别成 mgc 。
回复

使用道具 举报

发表于 2014-7-3 11:13:49 | 显示全部楼层
原帖由 jiangtao9999 于 2014-7-3 10:31 发表
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 的配置和这个无关。
回复

使用道具 举报

发表于 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.
回复

使用道具 举报

发表于 2014-7-3 15:02:33 | 显示全部楼层
你所谓的这些方法很多都会被某种正常操作擦掉。
GRUB 的参数参照只是在安装了 grub 的时候才成立,如果你没赚 grub ,而是用另外一个系统的 grub 去启动。就肯定没这东西了。
回复

使用道具 举报

发表于 2014-7-3 23:10:18 | 显示全部楼层
原帖由 jiangtao9999 于 2014-7-3 15:02 发表
你所谓的这些方法很多都会被某种正常操作擦掉。
GRUB 的参数参照只是在安装了 grub 的时候才成立,如果你没赚 grub ,而是用另外一个系统的 grub 去启动。就肯定没这东西了。 ...

/etc/default/grub 是固定的,它只是一个参数引导,生成的 grub.cfg 在 /boot/grub2 下面。另一个系统去启动本系统,只要是你已经启动了本系统,那么 /etc/default/grub 也肯定是本系统的设置。
如果用本系统 grub 去引导其它系统修改了 grub.cfg,但没人刻意去修改 /etc/default/grub,也不构成影响啊。
回复

使用道具 举报

发表于 2014-7-3 23:53:50 | 显示全部楼层
真不是固定的。这东西应该只在安装了 grub 后才有。而 grub 只不过是 linux 的一个引导程序,这东西是可以换别的的。
而且修改这个东西很正常,每次升级内核就要修改配置文件的时候,你肯定更希望修改这个东西来减少不必要的修改。
回复

使用道具 举报

发表于 2014-7-3 23:55:23 | 显示全部楼层
别自己又开始独出心裁好吗?
LSB 有相关规定,你就照着执行会要你命吗?
你非要和别人不兼容才爽?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-4-25 19:35 , Processed in 0.060645 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表