标签存档: debian

Debian在线升级dell服务器BIOS

1. 安装libsmbios软件包:
* 工具主页及文档: http://linux.dell.com/libsmbios/main/index.html

aptitude update
aptitude install libsmbios-bin

2. 查看当前BIOS版本及编号: 需要记住 System ID 及 BIOS Version 的值

hostname:/home/igi# getSystemId
Libsmbios:    2.0.3
System ID:    0x01B3
Service Tag:  XXXXXXX
Express Service Code: XXXXXXXXX
Product Name: PowerEdge 1950
BIOS Version: 2.2.6
Vendor:       Dell Inc.
Is Dell:      1

3. 下载对应BIOS的最新版本: http://linux.dell.com/repo/firmware/bios-hdrs/
* url格式: system_bios_ven_0x1028_dev_SYSTEM_ID_version_BIOS_VERSION
以 System ID为 0x01B3, BIOS Version为 2.2.6 为例
则需要找到: http://linux.dell.com/repo/firmware/bios-hdrs/ 下
对应的 system_bios_ven_0x1028_dev_0x01b3_version_x.x.x (x.x.x需要大于当前版本,如没有特别需求,使用最新版本即可)
对应的url为: http://linux.dell.com/repo/firmware/bios-hdrs/system_bios_ven_0x1028_dev_0x01b3_version_x.x.x/bios.hdr

wget http://linux.dell.com/repo/firmware/bios-hdrs/system_bios_ven_0x1028_dev_0x01b3_version_x.x.x/bios.hdr

4. 加载升级所需内核模块dell_rbu

modprobe dell_rbu
#确认模块已加载
lsmod | grep dell_rbu
dell_rbu                6800  0
firmware_class          7584  2 dell_rbu,bnx2

注意: 默认的debian内核已经有此模块,如果是其他内核,需要编译内核时做调整,推荐编译成模块

Firmware Drivers --->
<M> BIOS update support for DELL systems via sysfs

5. 升级BIOS

dellBiosUpdate -u -f bios.hdr

输出示例

dellBiosUpdate -u -f bios.hdr

WARNING: packet updates are not fully tested yet for packet modes v0/v2.
         We recommend that only monlithic updates be used at this point.
         You should only use packet mode on v0/v2 systems if you know what you are
         doing (for example, testing.)

Forcing MONOLITHIC mode...

Supported RBU type for this system: (MONOLITHIC, PACKET)
Using RBU v2 driver. Initializing Driver.
Setting RBU type in v2 driver to: MONOLITHIC (FORCED)
Prep driver for data load.
Writing RBU data (4096bytes/dot): .................................................
Notify driver data is finished.
Activate CMOS bit to notify BIOS that update is ready on next boot.
Update staged sucessfully. BIOS update will occur on next reboot.

6. 重启系统
7. 确认BIOS版本号

hostname:/home/igi# getSystemId
Libsmbios:    2.0.3
System ID:    0x01B3
Service Tag:  XXXXXXX
Express Service Code: XXXXXXXXXX
Product Name: PowerEdge 1950
BIOS Version: 2.7.0
Vendor:       Dell Inc.
Is Dell:      1

apt-get remove 与 apt-get autoremove、aptitude remove的不同

apt-get remove 与 apt-get autoremove、aptitude remove的不同

apt-get remove的行为我们很好理解,就是删除某个包的同时,删除依赖于它的包
例如: A 依赖于 B, B 依赖于 C
apt-get remove 删除B的同时,将删除A(很好理解,A依赖于B,B被删了,A也就无法正常运行了)

先说明下apt-get autoremove与aptitude remove是一样的效果的, 我们先了解下这两者的瓜葛

apt-get一开始并没有记录auto-install的信息,在apt(0.6.44.2exp1)此版本时(06年),apt-get增加了类似于aptitude的auto-install记录(/var/lib/apt/extended_states)。此后,aptitude在版本0.4.5.1(07年)转向使用apt-get的auto-install记录,而抛弃了自己原先的记录方式,再随后apt-get在版本0.7.7(07年)增加了autoremove的选项。

依赖关系是一个复杂而交错的链条,我们把举几个例子来看看它们的行为

以下图中, 绿色圆是为了满足依赖关系而apt-get或aptitude自动安装上的包
蓝色圆是管理员使用apt-get install 或 aptitude install
指定安装的包,简称为手动安装的包

例子1:
1. C 依赖于或推荐B软件包(apt-get和aptitude在安装软件时除了安装必要的依赖包,默认也会安装Recommends关系的包)
2. B 依赖于或推荐A, A被其他手动安装的包依赖

apt-get remove C         将删除C, 同时提示你用apt-get autoremove去清除B
apt-get autoremove C     将删除B, C
aptitude remove C        将删除B, C

我的理解: 删除C, 那么B这个包既是自动安装的,且没有其他手动安装的包依赖于它,
则可以判定B也是没必要的

例子2:
1. 在例子1的基础上, D 依赖于或者推荐B, 且D没有被其他手动安装的包依赖
这样的情况一般出现在用apt-get remove 某个手动安装的包之后.

apt-get remove C 将删除C, 同时提示你用apt-get autoremove去清除B,D apt-get autoremove C 将删除B, C, D aptitude remove C 将删除B, C, D

我的理解: 删除C, 那么B,D 这两个包既是自动安装的,且没有其他手动安装的包依赖于它们,
则可以判定B,D也是没必要的

例子3:
1. 在例子2的基础上, 有个手动安装的包E推荐D(既E Recommends D,手动安装E时,也会把D装上)

apt-get remove C         将删除C, 同时提示你用apt-get autoremove去清除B,D
apt-get autoremove C     将删除B, C, D
aptitude remove C        将删除B, C, D

我的理解: 删除C, 那么B,D 这两个包既是自动安装的,且没有其他手动安装的包依赖于它们,
则可以判定B,D也是没必要的
虽然D被E Recommend, 但为啥是这么设计的, 我也没猜出开发人员的想法

例子4:
1. 在例子3的基础上, D变成依赖于B, E变成依赖于D

apt-get remove C         将删除C
apt-get autoremove C     将删除C
aptitude remove C        将删除C

我的理解: 只删除C, 因为B被D依赖, D被E依赖, 间接来说,E不能没有B,D而正常运行,所以B,D被保留

例子5:
1. 在例子4的基础上, D变成推荐B, E依然依赖于D

apt-get remove C         将删除C, 同时提示你用apt-get autoremove去清除B
apt-get autoremove C     将删除B, C
aptitude remove C        将删除B, C

我的理解: 删除C, 而B没有被其他手动安装的包直接依赖或者间接依赖(我指那些一层层depend on的关系), D被E依赖
所以B不是必要的,可以删除, 而D不能删除