Yum репо на горе cifs

949
bgStack15

Что я хочу сделать

Создайте мой репозиторий yum / dnf на общем ресурсе cifs.

Длинная версия

Мой 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.

То, что оказалось работать, но не является оптимальным

Это работает, но очень неуклюже.

Разместите все rpms локально и создайте там хранилище. Затем перенесите данные репо в папку 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/ 
2
Вы когда-нибудь находили решение для этого? beeks 8 лет назад 0

1 ответ на вопрос

2
beeks

Я столкнулся с этой проблемой, и, кажется, некоторые другие тоже. Общим фактором является то, что наши каталоги репозитория монтируются на общем ресурсе CIFS с доступом к RW.

Для этого 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 Опция удаляет Byte Range Блокировки от применяются к смонтированной файловой системе, что позволяет createrepoуспешно обновлять / доступ к базе данных SQLite, не пытаясь и не суметь достичь блокировки.

Отличное открытие! Я смог выполнить эту задачу без перезагрузки, размонтировав и перемонтировав диск. bgStack15 8 лет назад 0
@ bgStack15, спасибо! Да, это могло бы сработать без перезагрузки. Я знаю, что многим нравится достигать всего без перезагрузки в Linux, но действительно ли это хороший тест, чтобы подтвердить, что все произойдет после неожиданной перезагрузки? beeks 8 лет назад 0
Добавив файловую систему с атрибутом `nobrl` в файл / etc / fstab, команда` mount / repo` будет монтироваться точно так же, как при загрузке. Так что я бы сказал, да, это хороший тест. Если у вас неожиданная загрузка, вы должны проверить другие вещи в дополнение к этой файловой системе. bgStack15 8 лет назад 0

Похожие вопросы