首页 > 代码库 > HP 打印机驱动移植到Fedora 9,以及其它新系统(无包管理工具)

HP 打印机驱动移植到Fedora 9,以及其它新系统(无包管理工具)

实现目标: 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-develdbus-devel gcc-c++ ghostscript openssl-devel libjpeg-devel net-snmp-develglibc-headers libtool libusb1-devel make wget python-imaging polkitpolkit-gnome PyQt4 dbus-python pygobject2 python-devel notify-python pythonpython-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()