实现目标: fedora 9 上支持hp officejet 100 mobile driver,并且移植到新的x系统上(无包管理工具)
由于HP官方网站打印机驱动仅支持Fedora17,18,19,20,还好HP提供了驱动源码,我们可以自己编译和安装。下面是我将HP驱动移植到Fedora9上的过程,供各位参考。
1. 安装环境的配置
su -c "yum -y -d 10 -e 1 install avahi-tools cups cups-devel dbus-devel gcc-c++ ghostscript openssl-devel libjpeg-devel net-snmp-devel glibc-headers libtool libusb1-devel make wget python-imaging polkit polkit-gnome PyQt4 dbus-python pygobject2 python-devel notify-python python python-reportlab sane-backends sane-backends-devel sane-frontends xsane"
因为Fedora9支持yum安装,所以很方便可以在线安装上述的软件包;
2. 删除旧的su -c "rpm -ev --nodeps libsane-hpaio"
su -c "rpm -ev hplip-gui"
su -c "rpm -ev hplip"
su -c "rpm -ev hpijs"
3. 下载hplip-3.14.4
4. 确定libusb版本号
确定系统中安装的libusb的版本号,由于fedora9 自带libusb0.1 ,而hplib-3.14.4需要libusb1.0支持,因此下一步需要安装libusb1.0,并将安装目录设置到/usr/lib下,否则找不到
下载libusb1.0.8
./configure --libdir=/usr/lib --includedir=/usr/include/ ;
Make ; make install
5. 配置 hplip-3.14.4
./configure --with-hpppddir=/usr/share/cups/model/HP --prefix=/usr --enable-qt4 --disable-libusb01_build --enable-doc-build --enable-cups-ppd-install --enable-foomatic-drv-install --enable-foomatic-ppd-install --enable-hpijs-install --disable-udev_sysfs_rules --disable-policykit --enable-cups-drv-install --enable-hpcups-install --enable-network-build --enable-dbus-build --enable-scan-build --enable-fax-build
与官网不同的地方是,支持了以下--enable-cups-ppd-install --enable-foomatic-drv-install --enable-foomatic-ppd-install --enable-hpijs-install 功能,这样为了能够找到所有HP支持的打印机驱动的gz(在/usr/share/cups/model/HP下)
6. make && make install 即可。
上面是有网络和支持包管理工具的情况下进行的配置和安装,我们这次主要的挑战是没有网络环境,也不存在包管理工具。
1) 首先让yum包管理工具仅下载,不安装
2) 将安装后的hp打印机驱动类库提取出来
针对第一个问题,yum提供了yum-downloadonly插件,yum -y install yum-downloadonly 插件;然后可以用rpm –q yum-downloadonly查询一下是否安装成功;
然后就可以加入downloadonly参数,进行只下载,不安装;其中—downloaddir=dir 下载目录;
如下所示:
su -c "yum -y -d 10 -e 1 install --downloadonly --downloaddir=/root/printer avahi-tools cups cups-devel dbus-devel gcc-c++ ghostscript openssl-devel libjpeg-devel net-snmp-devel glibc-headers libtool libusb1-devel make wget python-imaging polkit polkit-gnome PyQt4 dbus-python pygobject2 python-devel notify-python python python-reportlab sane-backends sane-backends-devel sane-frontends xsane"
其次即可在下载的目录中进行安装,用rpm -Uvh 或者rpm -ivh *.rpm , 如果存在依赖关系,可以加入参数--force 或者删除 --nodeps,然后重新安装
针对第二个问题,我们利用虚拟机的快照机制来提取类库的增量,我们选取的是vmware,上面环境为fedora9,
首先安装fedora9,并保存快照-1,;
其次在fedora9上安装上述下载的包,并编译hplip-3.14.4,然后安装,执行make install之后所有包都会mv到/usr/之下,或者其它目录;保存快照-2;
第三对比快照-1和快照-2下文件的不同;
功能也很简单:首先 在快照-1中执行find . / > 1.txt 找到所有/目录下文件名
在快照-2中执行同样的操作,得到2.txt
对比diff 1.txt 2.txt > 3.txt 得到所递增的所有文件
由于每次快照执行时会产生许多动态文件,如在/proc /sys /tmp (内存文件系统) /dev(设备文件系统) 下都是动态产生的文件,每次系统启动都会不同,因此我们进行预处理,将动态产生的文件进行删除;主要保存/usr /lib /etc 下文件,根据经验进行合理选择。
预处理之后,对预处理文件进行解析,将增加的文件拷贝到制定目录下的对应目录中;如/usr/lib/x 拷贝到 /UD/usr/lib/x
拷贝代码如下(),一个python处理文件处理脚本。
if __name__ == '__main__':
if len(sys.argv) != 3:
print "python program file path"
exit(0)
ofile = sys.argv[1]
path = sys.argv[2]
fp = open(ofile)
fp1 = open("sub.txt","a")
fp2 = open("add.txt","a")
for line in fp:
line = line.strip()
if len(line) == 0:
continue
if line[0]!= '<' and line[0]!='>':
continue
if line[0] == '<':
fp1.write(line[1:])
if line[0] == '>':
fp2.write(line[1:])
line = line[2:]
filename = os.path.basename(line)
filepath = os.path.dirname(line)
path1 = path + '/' + filepath
if os.path.exists(path1) == False:
os.makedirs(path1)
shutil.copyfile(line,path1+'/'+filename)
fp1.close()
fp2.close()
fp.close()