Linux实现的图书馆查询机
卢明, 沈奎林, 邵波
南京大学图书馆 南京 210046
摘要
针对图书馆查询机的特殊使用要求和使用过程中出现的普遍问题, 结合南京大学图书馆工作人员的工作经验和多次实验尝试, 提出一种全新的Linux实现方式。详细阐述查询机系统Linux化过程中的各个步骤, 最终实现定时开关机、系统桌面精简、浏览器定向访问、远程系统更新等几个功能。
关键词: 图书馆; 查询机; Linux; 远程系统更新
Use Linux to Implement Library Inquiry Machine
Lu Ming, Shen Kuilin, Shao Bo
Nanjing University Library, Nanjing 210046, China
Abstract
Library inquiry machine has its special use requirements and several common problems during normal use. Combining the staff experience of Nanjing University Library and their experiments, this paper brings up a brand new Linux implementation. This paper discusses every steps in the Linux process of the inquiry system. Ultimately, it realizes various functions like the timer switch, streamlined system desktop, district access of Web browser, and remote system update, etc.
Keyword: Library; Inquiry machine; Linux; Remote system update
1 引 言

图书馆查询机是随着图书馆藏书量日益上升, 旧式卡片查询目录[ 1]不能满足读者快捷查看藏书位置要求而诞生的符合信息化管理发展趋势的联机公共目录 (Online Public Access Catalogue, OPAC) 查询设备。查询机可以为读者提供方便的馆藏资源检索、个人图书借阅情况查看和续借手续办理等服务, 是图书馆日常活动中最活跃的组成部分之一。

南京大学图书馆从2009年仙林分馆投入使用以来, 不断扩大查询机的配置规模, 目前已有近百台查询机在馆内提供自助查询服务。2012年12月中旬之前, 查询机使用的都是Windows XP系统[ 2], 在对其进行开始菜单隐藏、禁用任务管理器、禁用浏览器相关项、设置浏览器定向访问等优化之后, 只允许读者运行浏览器程序和访问图书馆的OPAC页面。大多数时间查询机都能正常工作, 但是运行不确定时间后, 都出现了“Windows Explorer has encountered a problem and needs to close…”的错误提示, 重启之后才能恢复正常。有时候大部分的查询机同时产生这样的问题, 只有少数几台可以使用, 给读者造成了很大困扰。

通过讨论认为错误出现的根本原因在于操作系统, 只有变更操作系统才能彻底解除错误出现的可能。因为本馆所用查询机只有1GB硬盘, 而Windows系统所需空间比较大;有很多Linux系统占用空间比较小, 更加适合用于查询机, 所以最终决定采用Linux系统替换当前的Windows系统。

2 需求及技术思路
2.1 研究现状

图书馆查询机通常都是“操作系统+浏览器”组合式服务, 操作系统提供浏览器运行所需要的软硬件环境, 读者的所有操作都在浏览器内完成。下面以“图书馆”和“查询机”作为关键字在CNKI上获取了29篇与本文主题相关性较大的文献, 分别就操作系统、网络结构、浏览器三个方面进行讨论。

(1) 操作系统方面, 只有一篇选用Linux, 其余的都是Windows;Linux实现方式采用的是从内核层面开始修改创建的Linux+Qt+Konqueror三合一嵌入式操作系统[ 3]

(2) 网络结构方面, 4篇应用Windows终端网络模式来分配操作系统, 4篇应用PXE、BXP等无盘技术, 其余的都是本地启动的独立系统;Windows终端设备功能简单稳定性好, 但需要即时传送键盘与鼠标的操作和现实屏幕变化信息, 会造成严重的网络负荷, 随着终端数量的增多, 网速越来越慢[ 4];无盘技术客户端不安装硬盘, 启动时从服务器端将系统镜像加载到内存中运行, 整个过程只执行操作、不执行存储, 减轻了网络负荷, 提高了运行速度。

(3) 浏览器方面, 选用Windows操作系统的28篇中有7篇利用Webbrowser控件自制浏览器以达到定向访问控制的目的, 两篇安装第三方软件, 一篇划分VLAN, 其余的都是通过修改组策略和注册表实现;利用Webbrowser控件, 不管是VB[ 5]还是Delphi[ 6]都可以快速开发出功能特定的嵌入式浏览器;一些第三方软件如超级兔子[ 1]、网络爸爸[ 5]都能用来限制浏览器访问;设置交换机将查询机和OPAC服务器划分到同一VLAN中, 形成一个物理独立网络, 防止与工作网络或其他外网进行数据沟通[ 7]

本文实现的Linux系统查询机, 避免了Windows系统下常有的问题, 降低了查询机故障几率。

2.2 系统需求

图书馆查询机由于其特殊的使用环境和用户层次, 在实现系统定制时有如下要求:.

(1) 查询机上安装合适的Linux操作系统, 并在该操作系统中安装中文输入法和浏览器的中文显示相关支持;

(2) 针对图书馆查询机的特殊使用要求, 需要限制读者在查询机的操作, 使读者只能够进行与图书馆相关的活动;

(3) 查询机数量众多, 每一台独立安装更新将耗费大量的人力物力, 为减少重复工作, 此次更新还要优化整体架构, 加入远程系统更新功能。

2.3 设计思路

每一台查询机都是本地启动, 操作系统安装在本地硬盘上。每天开馆时查询机开启, 闭馆时查询机关闭, 完全不需要工作人员手动参与。从系统层面和浏览器层面屏蔽与图书馆无关的操作。每次启动查询机都对系统进行还原, 保证查询机每天都能正常运行。查询机加入远程系统功能之后有客户端和服务器端的区分, 每台查询机都是一个客户端, 服务器端设立在单独的PC机中, 为每个客户端提供系统更新服务。服务器端必须能及时知道每个客户端的运行状态, 以便在某个客户端出错时迅速做出处理。

3 具体实现步骤
3.1 选用合适的Linux版本

Linux是一种自由和开放源码的类Unix操作系统, 存在许多不同的发行版本, 主要有Ubuntu、Debian、Fedora、FreeBSD和CentOS等。在选取Linux版本时, 考虑到查询机的硬盘大小只有1GB, 不能安装上述主流版本, 只能从小型Linux、U盘Linux的角度寻找, 最终锁定一款名为Puppy的小型Linux发行版本。

Puppy是由Barry Kauler主导开发的一个以体积小、速度快闻名的小型Linux发行版[ 8], 网上论坛有众多爱好者合力改进Puppy Linux, 并改善其对中文用户的友好程度。本文选用的是Puppy Linux的Precise最新版, 它拥有非常全面的系统工具, 可以安装到硬盘, 还可以安装Grub4dos引导系统的正常运行, 系统桌面高度可定制化, 默认的Seamonkey浏览器同Firefox一样拥有众多的有用插件, 非常符合图书馆查询机个性化定制的需求。

另外一款名为BrowserLinux的发行版是基于Puppy开发的只供浏览网页的小型操作系统, 作为此次Precise的候补。

3.2 安装Linux系统

由于Puppy是一个Live CD系统, 即事先存储在某种可移动存储设备上, 可不特定于计算机硬件而启动的操作系统, 不能直接拷贝进硬盘, 所以先将其安装到U盘, 启动U盘系统后再安装到硬盘上。Universal-USB-Installer (通用USB安装程序) 是一个自启动Linux U盘创建工具, 支持大量的Linux发行版本, 实验中选用该工具进行Puppy的U盘系统安装。

启动Puppy的U盘系统后, 使用系统自带的Puppy Universal Installer (Puppy通用安装器) , 按提示步骤, 可以非常容易地安装到本地硬盘。需要注意的是, 在安装过程中, 会要求选择Full或Frugal安装模式, 这两种模式之间的区别在于是否展开系统文件, 前者系统文件会将内存中的文件结构完整地保存到硬盘上, 用户的所有修改都会毫无保留地保存下来;后者只在内存中展开系统文件, 而硬盘上只会保存打包后的文件, 用户对系统做出修改后可以保存在一个单独的用户文件中, 也可以不保存。此处选用任何一种安装方式都可以, 再次安装的时候只能选取Frugal模式, 保证系统中只有一个只读的sfs文件系统, 使系统每次启动的时候都还原成最初设置的状态。

3.3 系统优化

(1) 设置定时开关机.

通过设置BIOS实现定时开机[ 9]。以“PhoenixBOIS Setup Utility”为例, 启动查询机进入硬件自检后按F2进入BIOS设置界面, 校对好Main选项卡下的System Time, 然后在Advanced选项卡下选择ASF Configuration, 进入标准报警格式 (Alert Standard Format, ASF) 参数的配置界面。首先调整Resume By Alarm的参数为On, 启用定时开机功能;然后设置Date (of Month) Alarm的参数为0, 表示只考虑时间, 即每天;最后设置Time (hh::mm::ss) Alarm的参数为07:45:00, 将启动时间设置在开馆前5分钟。按F10保存并退出BIOS即完成对查询机每天自动开机的设置。

与Windows XP系统类似, Puppy也有计划任务功能, 允许用户制定周期任务或定时任务。Puppy的图形化界面关机需要执行exec wmpoweroff, 笔者所在图书馆通常在22点全部人员已经离开, 查询机每天定时关闭。图1的计划任务列表给出定制系统设定的两个计划任务:定时关机和浏览器定期检查。

图1 计划任务列表

.

(2) 精简系统桌面.

系统桌面精简包括桌面图标清除和系统任务栏隐藏等操作。

在每个桌面图标上右键选择移除项目即可完成桌面图标清除操作。由于系统自带的Seamonkey浏览器开启时间比较长, 多次点击现象频现, 弹出很多提示程序已经运行的警示框, 使读者误以为系统出现故障不能使用, 因此采用自动启动浏览器、屏蔽浏览器关闭按钮的方式将图书馆页面作为默认的界面。开机运行程序在完成网络连接和更新查询之后就会开启浏览器, 系统周期任务也设置了每分钟检查浏览器是否已运行, 若未运行则启动浏览器。至于桌面上的浏览器图标, 在系统使用过程中通常不会回到桌面上, 因而也不再需要。

隐藏系统任务栏需要修改/root目录下的.jwmrc文件[ 10], 将其中的系统菜单全部删除, 同时删除虚拟桌面、任务栏、系统托盘等相关内容。为防止读者进入文字模式, 需要对系统快捷键进行屏蔽, 方法是修改/ext/X11/xorg.conf文件[ 11], 将DontVTSwitch设为true屏蔽Ctrl+Alt+Fn, 将DontZap设为true屏蔽Ctrl+Alt+Backspace。

(3) 设置浏览器定向访问.

读者在使用查询机时, 不允许访问图书馆之外的网站, 需要设置浏览器的定向访问。该功能主要是通过Seamonkey的Silent Block扩展来实现的。在Seamonkey的Profile文件夹下新建contentblock-regex.txt和contentblock -whitelist-regex.txt文件, 前者填写.*阻止所有对外访问, 后者填写^ (http://) ?202.119.47.8 (.*) ﹩允许对图书馆网站的访问。当读者点击链接到图书馆之外的网站时, 因为被插件阻拦打开的是about:blank页面, 该页面与空白的桌面非常相似, 读者往往不知所措。利用Seamonkey的Stylish扩展, 可以修改about:blank页面的样式[ 12], 放置一些人性化的使用提示, 帮助读者顺利使用本系统。

此外, 浏览器界面要尽量简化, 始终保留在全屏状态是最好的选择, 因此使用Seamonkey的Keyconfig扩
展来屏蔽除复制粘贴、回格删除、刷新以外的浏览器快捷键, 同时通过执行xmodmap –e “pointer = 1 2 0 4 5 6 7 8 9 10”屏蔽鼠标右键。

(4) 实现远程系统更新.

图书馆的查询机数量众多, 以往更新系统的时候需要对每台查询机单独操作, 很不方便。这次换用Linux系统时, 增加了客户端和服务器的概念[ 13], 查询机扮演客户端的角色, 更新文件则存放在服务器上。每次查询机启动的时候, 都会执行一个脚本, 启动网络连接, 然后传给服务器一个表示自己身份的文件, 用于每天的查询机状态核准, 同时在服务器上查找是否需要更新系统, 需要更新则下载替换本地的系统文件。

众多查询机网卡MAC各不相同, Puppy系统在启动的时候需要重新执行dhcpcd命令才能正常连接网络, 网络连接脚本能够有效地保证系统启动后网络的顺利联通, 如下所示:.

#connect to the net.

/usr/sbin/dhcpcd.

for i in {1..10}; do.

if [ "﹩ (ifconfig | grep ′inet addr′ | grep -v ′127.0.0.1′) " = ′′ ]; then.

rm -rf /var/run/dhcpcd.pid.

/usr/sbin/dhcpcd.

else.

break;

fi.

done.

文件传输方面, 对比SCP和FTP两种协议之后, 选用了后者。这是因为SCP不支持将密码放在脚本中, 而免除密码的Key-gen方式产生的秘钥文件不适合网络环境多变的情况, 同时图书馆已有Windows环境下的Serv-U FTP服务器, 不需要为简单的FTP服务再分配一个静态IP地址。FTP客户端使用的lftp工具下载能力非常强, 具有镜像拷贝、断点续传、多进程下载等功能[ 14]。当更新系统的时候, 不仅下载系统文件, 还下载包含该系统文件md5值的说明文件, 并且下载完毕后进行md5值验证, 保证不会更新错误的系统文件而导致系统完全不能使用。

3.4 打包成只读文件

系统初次安装到硬盘, 或者是Full模式, 所有改动都保存在硬盘上, 或者是Frugal模式, 所有改动保存在用户文件系统xfs (x可能是2/3/4/中的任意值) 中。查询机平时属于无人管理的设备, 如果每次启动系统的时候都能够还原成最初设定的状态, 则不会随着长期的使用积累越来越多的垃圾文件。

在以“查询机”作为关键字搜索到的文章中, 石林林[ 5]直接安装了蓝光硬盘保护卡实现每天的自动还原;王雪冬等[ 15]在分析硬盘保护卡工作原理的基础上提出从具有还原保护功能的BIOS主板中提取出有效文件放入不具有还原功能的主板中使其也能拥有硬盘保护功能;马忆欣[ 16]使用了虚拟影子系统, 该系统是类似虚拟机的新一代防毒防木马类软件, 可以用隔离罩将计算机保护起来, 所有修改都在虚拟系统中发生, 不会对真实系统造成影响;张义东[ 17]应用基于PXE的BXP软件从服务器调取操作系统镜像而将用户修改保存在本地内存中, 下次重启时所有修改消失, 就好像安装了还原卡一样。

本文采用的 Puppy Linux操作系统在使用Frugal模式安装到硬盘时, 可以在启动过程中将只读的sfs格式文件系统加载到内存来运行系统, 而不一定需要用户文件系统xfs, 由此可以保证用户对系统的修改不会保留到下次启动中去。安装Dougalremaster程序包后在Urxvt终端中执行pupremaster.sh, 根据各步骤提示, 将系统文件连同所做的修改一起打包成只读的sfs文件[ 18], 以供再次进行硬盘安装时调用。

3.5 制作最终的Linux系统

只读的sfs文件系统中包含除系统引导之外的所有内容, 只要在U盘启动下再次安装系统到硬盘 (只能是Frugal模式) , 然后替换成上一步制作的sfs文件即可。下次硬盘启动时便会引导定制过的Linux系统。

4 关于网络启动

本馆使用的查询机支持PXE和RPL两种网络启动模式。PXE是动态路由, 配置时只需要在服务器上安装DHCP服务器和TFTP服务器, 客户端无需做任何配置, 从PXE启动即可;而RPL是静态路由, 每台客户机都要单独安装。

Puppy Linux对PXE有很好的支持[ 19], 用系统自带的芭比软件包管理器安装好dnsmasq和netboot-server的pet包, 运行mknetboot.sh从系统的ISO镜像文件分解出vmlinuz和initrd.gz。服务器执行netboot-server-jb.sh之后即已启动DHCP和TFTP服务器, 向局域网内的查询机提供PXE服务[ 20], 查询机读取BIOS中的PXE代码后请求DHCP服务器分配到动态IP地址, 然后客户机通过TFTP协议下载启动软件包和系统镜像, 在本地内存中以实模式加载运行终端操作系统。

由于PXE协议在查找DHCP协议时并未对服务器的真实性进行验证, 很容易被假冒的DHCP服务器欺骗接收到错误的系统镜像, 存在严重的安全漏洞;而且笔者所在图书馆的查询机所在的网络已有提供DHCP服务的路由器存在, 多一个DHCP服务器会对其他计算机的正常上网造成影响;而且每台查询机启动都要传输上百兆的系统文件, 众多查询机一起启动会造成严重的网络负担;因此没有将该方案应用于图书馆查询机系统的网络架构中。

5 结 语

图书馆查询机是连接读者与图书馆资源的重要桥梁, 保障读者正常使用查询机能够促进图书馆资源利用率最大化。本文就查询机系统的Linux改造讨论了定时开关机、浏览器定向访问、远程系统更新等功能的实现方法, 并对网络启动进行可行性分析, 有助于同类情况下的查询机维护。该系统目前在南京大学图书馆运行十分稳定, 不再有错误提醒和蓝屏的情况发生, 简洁的使用界面和人性化的使用提示深受广大读者的喜爱。

虽然查询机在平时开馆时自动开启, 闭馆时自动关闭, 但是遇到寒暑假等节假日需要批量调整开关机时间时, 现有的系统还无法让人满意。另一方面, 查询机有1GB大小的硬盘, 在安装本系统后仍有近500MB的空余, 鉴于其具有的分布广泛、界面简洁、操作周期短等特点, 若与参考咨询IM系统相结合, 则可以为读者提供实时交流的服务, 同时也是获取读者使用图书馆产生的反馈信息的良好渠道。

参考文献
[1] 孙明杰, 陈刚. 图书馆无人管理查询机的实现[J]. 科技情报开发与经济, 2007, 17 (30) : 52-53. (Sun Mingjie, Chen Gang. The Implementation of Unattended Inquiry Machine in Library[J]. Sci-Tech Information Development & Economy, 2007, 17 (30) : 52-53. ) [本文引用:2] [CJCR: 0.3002]
[2] 赵志强. 高校图书馆OPAC检索机管理[J]. 情报探索, 2009 (9) : 90-92. (Zhao Zhiqiang. Management of OPAC Computers in University Library[J]. Information Research, 2009 (9) : 90-92. ) [本文引用:1]
[3] 王政军, 金玉玲, 任永功. 基于开源软件构建OPAC检索机的研究与实现[J]. 现代图书情报技术, 2007 (3) : 73-76. (Wang Zhengjun, Jin Yuling, Ren Yonggong. Research and Implementation of OPAC Search Machine Based on Open Source Software[J]. New Technology of Library and Information Service, 2007 (3) : 73-76. ) [本文引用:1] [CJCR: 1.073]
[4] 章治. 地方高校图书馆公共查询系统的入侵防御[J]. 河南图书馆学刊, 2009, 29 (1) : 107-109. (Zhang Zhi. The Public Inquiry System of Local University Library to Invades the Defense[J]. The Library Journal of Henan, 2009, 29 (1) : 107-109. ) [本文引用:1] [CJCR: 0.4449]
[5] 石林林. 基于PC机上OPAC查询机的实现及批量安装[J]. 现代商贸工业, 2011, 23 (11) : 242-243. (Shi Linlin. The Implementation of OPAC Inquiry Machine Based on PC and Their Batch Installation[J]. Modern Business Trade Industry, 2011, 23 (11) : 242-243. ) [本文引用:3] [CJCR: 0.2742]
[6] 李善杰. 基于Windows平台构建OPAC检索机的研究与实现[J]. 现代图书情报技术, 2007 (12) : 74-77. (Li Shanjie. Research and Implementation of OPAC Search Machine Based on Windows Platform[J]. New Technology of Library and Information Service, 2007 (12) : 74-77. ) [本文引用:1] [CJCR: 1.073]
[7] 王力. 图书馆信息检索机安全配置策略[J]. 现代电子技术, 2010, 33 (18) : 127-130. (Wang Li. Security Configuration Strategy for Public Information Retrieval Systems in Libraries[J]. Modern Electronics Technique, 2010, 33 (18) : 127-130. ) [本文引用:1] [CJCR: 0.5199]
[8] Puppy Linux 5. 3. 1[EB/OL]. [2011-12-13]. http://www.startos.com/linux/news/2011121330840.html. [本文引用:1]
[9] 肖爱斌, 巩林立, 张爱民. 图书馆WebPAC查询机智能化管理的实现[J]. 兰州工业高等专科学校学报, 2006, 13 (2) : 27-30. (Xiao Aibin, Gong Linli, Zhang Aimin. The Methods for Realization of Intelligent Management of WebPAC Access Computer[J]. Journal of Lanzhou Polytechnic College, 2006, 13 (2) : 27-30. ) [本文引用:1] [CJCR: 0.2214]
[10] 如何创建自己的菜单[EB/OL]. [2008-07-16]. http://www.minilinux.net/node/98. How to Build Your Own Menu[EB/OL]. [2008-07-16]. http://www.minilinux.net/node/98. [本文引用:1]
[11] 新浪博客. 关于Grub加密码、X禁用组合键[EB/OL]. [2010-02-10]. http: //blog. sina. com. cn/s/blog_5596202b0100jli
h. html. (Sina Blog. On the Grub Encryption and Combination Key Disablement[EB/OL]. [2010-02-10]. http://blog.sina.com.cn/s/blog_5596202b0100jlih.html.
[本文引用:1]
[12] Spice Up That Boring About: Blank Page in Firefox[EB/OL]. [2007-09-05]. http://www.howtogeek.com/howto/internet/firefox/spice-up-that-boring-aboutblank-page-in-firefox/. [本文引用:1]
[13] 张春慧. 图书馆触摸导读系统的维护[J]. 科技情报开发与经济, 2007, 17 (13) : 129-130. (Zhang Chunhui. Discussion on the Maintenance of the Library’s Reading Guidance System with Touch Screen[J]. Sci-Tech Information Development & Economy, 2007, 17 (13) : 129-130. ) [本文引用:1] [CJCR: 0.3002]
[14] 胡晅晖. Lftp用法手册[EB/OL]. [2012-09-17]. http: //my. oschina. net/huxuanhui/blog/78855. ( Hu Xuanhui. Lftp Usage Manual[EB/OL]. [2012-09-17]. http://my.oschina.net/huxuanhui/blog/78855. [本文引用:1]
[15] 王雪冬, 王爱新, 秘书亮, 等. 改造BIOS增加硬盘保护卡[J]. 河北农业大学学报: 农林教育版, 2007, 9 (2) : 48-50. (Wang Xuedong, Wang Aixin, Bi Shuliang, et al. Altering BIOS Adding Hard Disk Protecting Card[J]. Journal of Agricultural University of Hebei: Agriculture & Forestry Education, 2007, 9 (2) : 48-50. ) [本文引用:1] [CJCR: 0.669]
[16] 马忆欣. 图书馆查询机维护探析[J]. 计算机科学, 2008, 35 (4) : 82-83. (Ma Yixin. Analysis of the Maintenance of Library Inquiry Machine[J]. Computer Science, 2008, 35 (4) : 82-83. ) [本文引用:1] [CJCR: 0.61]
[17] 张义东. 基于BXP无盘的图书馆公共资源查询系统[J]. 农业网络信息, 2006 (11) : 41-42, 51. (Zhang Yidong. Library Public Resource Inquiry System Based on BXP Non-disk[J]. Agriculture Network Information, 2006 (11) : 41-42, 51. ) [本文引用:1] [CJCR: 0.34]
[18] 博客园. 制作自己的Puppy Linux Live-CD发行版的三种方法[EB/OL]. [2009-10-23]. http: //www. cnblogs. com/top5/archive/2009/10/23/1588525. html. ( Blog Garden. Three Methods of Building Puppy Linux Live-CD by Yourself[EB/OL]. [2009-10-23]. http://www.cnblogs.com/top5/archive/2009/10/23/1588525.html. [本文引用:1]
[19] 5-Steps–Netboot a Puppy over the LAN with NO Media (PXE)[EB/OL]. [2005-10-14]. http://murga-linux.com/puppy/viewtopic.php?p=488348. [本文引用:1]
[20] 王丹, 赵秀岩. 无盘系统在数字图书馆电子化服务中的应用[J]. 河北科技图苑, 2006, 19 (3) : 13-15. (Wang Dan, Zhao Xiuyan. Application of Disk-Free System in Electronic Service in the Digital Library[J]. Hebei Sci-Tech Library Journal, 2006, 19 (3) : 13-15. ) [本文引用:1] [CJCR: 0.5952]