Chinaunix首页 | 论坛 | 博客
  • 博客访问: 562524
  • 博文数量: 199
  • 博客积分: 2433
  • 博客等级: 大尉
  • 技术积分: 2155
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-05 13:32
文章分类

全部博文(199)

分类: LINUX

2020-06-07 22:46:34

近期升级archlinux后,发觉原来的打印机不能使用了,出现"protocol negotiation failed: NT_STATUS_CONNECTION_DISCONNECTED"错误

经查这个问题是因为smbclient从4.11开始协议取消了nt1,使用smbv2,所以导致协议不能协商,解决办法如下:

如果是直接连接服务器,服务器是linux平台搭建的samba,那简单,直接客户端访问的时候添加option='client min protocol=nt1'
也就是smbclient -L \\192.168.80.1 --option='client min protocol=nt1'

如果打印机是连接在无线路由器上的话,这种稍微麻烦,需要降级samba版本,可是因为samba和smbclient,还有libwbclient依赖的某些包,使用downgrade降级是不能成功的,会出现如下错误:
:: The following package cannot be upgraded due to unresolvable dependencies:
      samba
:: Do you want to skip the above package for this upgrade? [y/N]

这种情况解决办法如下:
smbclient和libwbclient包含在samba里面,samba所关联的包有talloc,tdb,ldb,tevent,gamin这几个包,需要重新编译这些包,使用devtools来编译.下面是解决步骤:

这里使用的samba版本和依赖包的版本如下:
talloc 2.1.16-1
ldb 1:1.4.3-1
tdb 1.3.18-1
tevent 1:0.9.39-1
samba 4.9.4-2
libwbclient 4.9.4-2
smbclient 4.9.4-2
gamin 0.1.10-8
先安装devtools,命令:pacman -S devtools

为了方便,直接git clone archlinux提供的packages,然后git查出以上包对应的版本并切换到分支上,命令:git log --grep talloc(2.1.16-1) && git checkout commitid.....等,

然后分别进入以上包进行编译操作,命令:extra-x86_64-build,之后会在devtools的chroot环境安装,并在包目录(如:talloc目录)下生成对应的包

注意的是archlinux从2019.12开始不再使用xz压缩,而改用zst(.pkg.tar.zst),这里是talloc-2.1.16-1-x86_64.pkg.tar.zst

关联包编译的顺序是先编译talloc,tdb,然后再编译tevent,ldb,最后编译samba

tevent的依赖包不在官方仓库中,所以需要把编译好的talloc包传递给tevent编译环境,否则会出现not found
命令:extra-x86_64-build -- -I ../talloc/talloc-2.1.16-1-x86_64.pkg.tar.xz

备注:(本质上extra-x86_64-build是使用了makechrootpkg命令,所以--是使用了makechrootpkg的参数,如果是-- --意思就是参数调用了makepkg的参数)

接着就是编译ldb,ldb需要的依赖包包括了tdb,talloc和tevent,同样也需要在编译的时候把这个三个编译好的包传递给ldb的编译环境,
命令:extra-x86_64-build -- -I ../tdb/tdb-1.3.18-2-x86_64.pkg.tar.xz -I ../talloc/talloc-2.1.16-1-x86_64.pkg.tar.xz -I ../tevent/tevent-1\:0.9.39-2-x86_64.pkg.tar.xz

然后就是gamin,这个包不需要依赖,直接extra-x86_64-build

最后就是开始编译samba,samba需要以上的依赖包
命令:extra-x86_64-build -- -I ../tdb/tdb-1.3.18-2-x86_64.pkg.tar.xz -I ../talloc/talloc-2.1.16-1-x86_64.pkg.tar.xz -I ../tevent/tevent-1\:0.9.39-2-x86_64.pkg.tar.xz -I ../ldb/ldb-1\:1.4.6-1-x86_64.pkg.tar.xz -I ../gamin/gamin-0.1.10-8-x86_64.pkg.tar.zst

如无其他错误,samba会编译出如下包:
libwbclient-4.9.4-2-x86_64.pkg.tar.zst
samba-4.9.4-2-x86_64.pkg.tar.zst
smbclient-4.9.4-2-x86_64.pkg.tar.zst

最后直接进行pacman安装:
sudo pacman -U talloc-2.1.16-1-x86_64.pkg.tar.zst \
../tdb/repos/extra-x86_64/tdb-1.3.18-1-x86_64.pkg.tar.zst \
../tevent/repos/extra-x86_64/tevent-1\:0.9.39-1-x86_64.pkg.tar.zst \
../ldb/repos/extra-x86_64/ldb-1\:1.4.3-1-x86_64.pkg.tar.zst \
../gamin/repos/extra-x86_64/gamin-0.1.10-8-x86_64.pkg.tar.zst \
../samba/repos/extra-x86_64/samba-4.9.4-2-x86_64.pkg.tar.zst \
../samba/repos/extra-x86_64/libwbclient-4.9.4-2-x86_64.pkg.tar.zst \
../samba/repos/extra-x86_64/smbclient-4.9.4-2-x86_64.pkg.tar.zst

至此,所有包可以成功降级,使用smbclient -L \\192.168.80.1,就可以搜索出打印机,而不是出现"NT_STATUS_CONNECTION_DISCONNECTED"错误

最后为了防止以后系统升级把这些包升级了,在/etc/pacman.conf添加忽略这些包的升级,ignorePkg=samba......等等

至于为什么使用devtools环境,是因为devtools提供一个干净的编译环境,devtools默认的目录是在/var/lib/archbuild,配置文件是在/usr/share/devtools,配置文件pacman-extra.conf对应的是extra-x86_64-build命令

也可以使用custom-x86_64-build命令,要使用custom-x86_64-build命令,
需要做一个软连接:ln -s /bin/archbuild /usr/bin/custom-x86_64-build,对应的配置文件是/usr/share/devtools/pacman-custom.conf

关于devtools的更多信息,整理后,以后再添加,先写到这里
阅读(6321) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~