0%

Debian安装P1008打印机这篇post里使用getweb为P1008下载firmware,打印测试也成功了。但每次重新启动打印机,都无法打印,删除掉重新安装打印机才可以。不知道哪里的原因。

安装配置

只好重新配置,这次使用hplip(HP Linux Imaging and Printing)包里的hp-setup来配置打印机。这是一个图形化的HP打印机配置程序。

首先需要安装hplip-gui,默认是没有安装的,hp-setup需要这个包:

apt-get install hplip-gui

将打印机连接,上电,然后启动hp-setup,不要用sudo,直接使用root

hp-setup

会搜索到打印机,然后需要下载一个专有的plugin程序,但一直下载不成功。可以手动下载执行,然后再重新执行hp-setup

下载hp提供的专有plugin

根据系统安装的hplip版本选择下载对应的plugin。可以使用dpkg -l hplip查看hplip的版本,比如3.13.11-2,下载3.13.11版本的plugin就行了。

然后安装plugin

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# chmod +x hplip-3.13.11-plugin.run
# ./hplip-3.13.11-plugin.run
Verifying archive integrity... All good.
Uncompressing HPLIP 3.13.11 Plugin Self Extracting Archive...............................

HP Linux Imaging and Printing System (ver. 3.13.11)
Plugin Installer ver. 3.0

Copyright (c) 2001-13 Hewlett-Packard Development Company, LP
This software comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to distribute it
under certain conditions. See COPYING file for more details.

Plug-in version: 3.13.11
Installed HPLIP version: 3.13.11
Number of files to install: 26

Done.

最后重新运行hp-setup就可以完成安装了,这次安装完了貌似没问题了。

共享本地打印机

安装好的本地打印机可以通过网络共享给其他用户使用。

本地设置
通过浏览器访问http://127.0.0.1:631,进入Administration页签,右侧Server栏下,勾选"Share printers connected to this system”,这样默认是在本地网络上共享打印机,只有同一个网段的主机才能通过网络使用这台打印机。如果同时勾选了”Allow printing from the Internet”,则所有通过网络可以访问这台主机的机器都可以使用这台打印机。

客户端连接
如果使用XP系统通过网络使用这台打印机,在添加打印机向导中,选择”网络打印机->连接到Internet、家庭或办公网络上的打印机”,URL中输入打印机的地址,如下:

http://192.168.1.88:631/printers/HP_LaserJet_P1008

这段URL除了最后的打印机名称,前面是固定的,打印机名称从打印机管理界面(http://127.0.0.1:631)的printers页签可以看到。

然后下一步安装打印机的XP驱动就可以了。最好提前安装打印机的XP驱动。

专有的东西就是难用,硬件也应该开源。

UPDATE:
经过实测,打印机已经完全正常。

参考:
[1]What is the HPLIP Binary Plug-In and How Do I Install It?
[2]HP Linux Imaging and Printing
[3]HP plugins

===
[erq]

要拒绝系统用户登录,可以将其shell设置为/usr/sbin/nologin或者/bin/false

1
# usermod -s --shell /usr/sbin/nologin username

或者

1
# usermod -s -shell /bin/false username

/bin/false

/bin/false什么也不做只是返回一个错误状态,然后立即退出。将用户的shell设置为/bin/false,用户会无法登录,并且不会有任何提示。

/usr/sbin/nologin

nologin会礼貌的向用户显示一条信息,并拒绝用户登录:

This account is currently not available.

有一些软件,比如一些ftp服务器软件,对于本地非虚拟账户,只有用户有有效的shell才能使用ftp服务。这时候就可以使用nologin使用户即不能登录系统,还能使用一些系统服务,比如ftp服务。/bin/false则不行,这是二者的重要区别之一。

/etc/nologin

如果存在/etc/nologin文件,则系统只允许root用户登录,其他用户全部被拒绝登录,并向他们显示/etc/nologin文件的内容。

锁定用户账户

锁定用户账户

1
# passwd -l --lock username

#解锁用户账户

1
# passwd -u --unlock username

删除用户密码

1
# passwd -d --delete username

===
[erq]

在vim面前感觉自己永远是个新手!这句话对emacs说不定也适用,不过我没用过emacs这么高大上的编辑器!

Read more »

debian installer提供了四个tty(TeleTYpe)控制台,tty1就是安装界面,tty2和tty3提供了一个busybox命令行,tty4用于安装日志输出。通过tty4可以看到全部的安装和错误信息,很是方便。

上一篇post提到已经有集成firmware的netinst iso镜像文件可以下载了,但很不幸,服务器安装的时候仍然提示找不到ql2400_fw.bin,也就是installer仍然没有找到qlogic卡的firmware。

无论使用原始的netinst还是添加firmware的netinst镜像,都不会提示需要额外的firmware。官方的wiki也提到,安装程序有时候会提示用户完成安装所需要的firmware,有时候却不会提示。所以建议在安装之前,下载non-free的firmware包,将其解压到移动存储设备的/firmware目录下,安装程序如果需要会自动的去移动存储设备的/firmware目录下寻找相应的firmware。

另一个解决办法是为原始的netinst iso镜像添加firmware,脚本如下,只支持netinst testing iso镜像:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#!/bin/bash

set -ex

if \[ $# != 2 \]; then
echo "Usage: addfirmware.sh <origin_iso_file> <new_iso_file>"
exit 1
fi

orign_iso_file=$1
new_iso_file=$2

#临时目录
temp=$(mktemp -d)
origin_iso=${temp}/old
new_iso=${temp}/new
firmware_file=${temp}/firmware
firmware_target=${firmware_file}/target
initrd=${temp}/initrd

#原始工作目录
origin_pwd=$(pwd)

mkdir ${origin_iso} ${firmware_file} ${initrd}

#挂载原始镜像iso文件,挂载后是只读的,拷贝全部文件到./new目录
sudo mount -o loop ${orign_iso_file} ${origin_iso}
cp -a ${origin_iso} ${new_iso}
sudo umount ${origin_iso}

#将初始化内存盘压缩cpio文件解压到./initrd目录
cd ${initrd} && gunzip < ${new_iso}/install.amd/initrd.gz sudo cpio --extract --preserve --verbose

#下载testing的firmware包
cd ${firmware_file} &&
wget http://cdimage.debian.org/cdimage/unofficial/non-free/firmware/testing/current/firmware.tar.gz
&& tar zxf firmware.tar.gz

#将所有的firmware deb包提取到./firmware/target目录
for file in *deb; do
dpkg-deb -x ${file} ${firmware_target}
done

#将target目录下所有的内容拷贝到./initrd目录
sudo cp -ra ${firmware_target}/. ${initrd}

#打包新的initrd文件并拷贝到./new目录下
cd ${initrd} && find . cpio --create --format='newc' gzip -9 > ../initrd.gz.new
sudo cp ../initrd.gz.new ${new_iso}/install.amd/initrd.gz

#制作新的镜像文件
cd ${origin_pwd} &&
sudo genisoimage -o ${new_iso_file} -b isolinux/isolinux.bin \\
-c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -J -R ${new_iso}

sudo rm -rf ${temp}

USB stick引导

上面制作的iso镜像刻录光盘安装系统是没有问题的。但如果要从USB引导就不可以了,因为从USB或硬盘启动时,PC-BIOS需要一个MBR,这样需要再为ISO镜像文件添加一个MBR,这与原来的El Torito引导记录并不冲突,二者可以共存。因此就可以创建一个MBR来启动El Torito引导记录,从而无论是从CDROM还是USB,HDD都可以正确引导。
这种MBR就叫做isohybrid

syslinux提供了这样的isohybrid MBR,还需要使用xorriso来制作镜像。因此先安装xorriso和syslinux

apt-get install xorriso syslinux

然后将上面脚本最后制作iso的命令更改为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# -iso-level iso级别3允许文件大于4G
# -partition_offset 分区表起始位置
# -isohybrid-mbr 主引导记录文件
# -b 为PC-BIOS指定El Torito引导记录文件(boot image)
# -e 为EFI指定El Torito引导记录文件(boot image)
# -c 指定El Torito Boot Catalog文件
# -no-emul-boot 没有模拟启动,默认是软盘模拟启动
# -boot-load-size BIOS要读取引导记录文件(boot image)的几个数据块,boot image由-b参数指定。
# -boot-info-table 引导信息表写入boot image
# -r或-R Rock Ridge扩展
# -J Joliet扩展,用于windows系统
# -V 指定volume lable
# -o 输出iso文件
sudo xorriso -as mkisofs -iso-level 3 -partition_offset 16 -isohybrid-mbr \\
/usr/lib/syslinux/isohdpfx.bin -o ${new_iso_file} -b isolinux/isolinux.bin -c isolinux/boot.cat \\
-no-emul-boot -boot-load-size 4 -boot-info-table -r -V "firmwared debian" ${new_iso}

这里没有使用-J参数,如果添加了此参数会有警告:

libisofs: WARNING : Can’t add /debian to Joliet tree. Symlinks can
only be added to a Rock Ridget tree.

-J参数为iso生成Joliet目录树,当iso文件在windows系统下使用时才有用,Joliet不是标准的,只有windows和linux(为了和windows兼容)在使用。因此这个参数可以安全的去掉。

这里使用的isohybrid MBR为syslinux提供的/usr/lib/syslinux/isohdpfx.bin,这样生成的iso无论是刻盘还是写到usb stick都可以正常的引导安装了。

脚本下载

参考:
add-firmware-to
REBUILDING DEBIAN INSTALLER ISO TO INCLUDE ADDITIONAL DRIVERS
Mkisofs

===
[erq]