我想做的事
在 cifs 共享上构建我的 yum/dnf 存储库。
长版本
我的 Windows 服务器是我的主要文件服务器,我暂时将 Support/Platforms/Korora22/ 目录存储在那里。我的 rpm 在那里,有些是下载的,有些是自行制作的。
我想在那里托管一个存储库,但我的createrepo .
命令返回此错误:
[root@linux-05|/mnt/smash/Support/Platforms/Korora22]# createrepo .
Spawning worker 0 with 3 pkgs
Spawning worker 1 with 3 pkgs
Spawning worker 2 with 2 pkgs
Spawning worker 3 with 2 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
(process:368): GLib-CRITICAL **: g_timer_stop: assertion 'timer != NULL' failed
(process:368): GLib-CRITICAL **: g_timer_destroy: assertion 'timer != NULL' failed
Traceback (most recent call last):
File "/usr/share/createrepo/genpkgmetadata.py", line 308, in <module>
main(sys.argv[1:])
File "/usr/share/createrepo/genpkgmetadata.py", line 280, in main
mdgen.doRepoMetadata()
File "/usr/lib/python2.7/site-packages/createrepo/__init__.py", line 1005, in doRepoMetadata
rp.getOtherdata(complete_path, csum)
File "/usr/lib64/python2.7/site-packages/sqlitecachec.py", line 61, in getOtherdata
self.repoid))
TypeError: Can not create db_info table: database is locked
/etc/yum.repos.d/bgstack.repo
[bgstack]
name=bgstack
baseurl=file:///mnt/smash/Support/Platforms/Korora22/
gpgcheck=0
我已经尝试过但没有帮助的步骤
rm -rf /var/lib/rpm/__db*
rpm --rebuilddb
dnf clean all
我的 /etc/fstab 包含以下行:
//win-server1/smash /mnt/smash cifs rw,user,uid=bgstack,credentials=/root/.bgstack.example.com,exec,soft
观察到它将以用户 bgstack 的身份挂载我的目录,因此我实际上是卸载了它,然后以 uid root 的身份挂载(有效地,通过省略那部分):
mount -t cifs -o credentials=/root/.bgstack.example.com //win-server1/smash /mnt/smash
它仍然无法成功完成 createrepo 命令。
看似有效但并非最佳方案
这虽然可行,但是非常笨重。
在本地托管所有 rpm 并在那里创建存储库。然后将存储库数据传输到 cifs 共享。
# as root: createrepo does not like regular users
mkdir -p ~/localrepo
cp -pr /mnt/smash/Support/Platforms/Korora22/*rpm ~/localrepo
createrepo ~/localrepo
cp -pr ~/localrepo/repodata /mnt/smash/Support/Platforms/Korora22/
答案1
我遇到了这个问题,而且似乎其他人也遇到了这个问题。共同的因素是,我们的存储库目录安装在具有 RW 访问权限的 CIFS 共享上。
根据这个 RedHat BugZilla: https://bugzilla.redhat.com/show_bug.cgi?id=429201
对我有用的是修改我的/etc/fstab/
文件以将其包含nobrl
在我的 CIFS 声明中:
# /etc/fstab
# Created by anaconda on Mon Apr 18 15:04:59 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=a15ce235-0cd8-4890-95ed-9f1f8803e1fc /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
\\\\QNAP\\repo /repo cifs nobrl,rw,file_mode=0777,dir_mode=0775,async,noperm,credentials=/root/creds_smb_library_core,uid=5000,gid=6000 0 0
重新启动后,确认文件系统已从冷启动挂载,createrepo
运行正常。
这nobrl
选项删除针对已挂载文件系统应用的字节范围锁,这样可以createrepo
成功更新/访问 SQLite 数据库,而无需尝试并无法获得锁定。