我想做的事

我想做的事

我想做的事

在 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 数据库,而无需尝试并无法获得锁定。

相关内容