Repo Yum em montagem cifs

2

O que eu quero fazer

Construa meu repositório yum / dnf em um compartilhamento cifs.

Versão longa

Meu servidor windows é meu servidor de arquivos principal, e por enquanto guardo meu diretório Support / Platforms / Korora22 /. Eu tenho meu rpms lá, alguns baixados e alguns auto-enrolados.

Eu quero hospedar um repositório lá, mas meu comando createrepo . retrocede esse erro:

[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

Etapas que eu já tentei que não ajudaram

rm -rf /var/lib/rpm/__db*
rpm --rebuilddb

dnf clean all

Meu / etc / fstab inclui esta linha:

//win-server1/smash       /mnt/smash        cifs     rw,user,uid=bgstack,credentials=/root/.bgstack.example.com,exec,soft

Observe que ele montará meu diretório como o usuário bgstack, então eu na verdade montei e montei com o uid root (efetivamente, deixando essa parte fora):

mount -t cifs -o credentials=/root/.bgstack.example.com //win-server1/smash /mnt/smash

Ainda não completaria com sucesso o comando createrepo.

O que parece funcionar, mas não é ideal

Isso funciona, mas é muito desajeitado.

Hospede todos os rpms localmente e crie o repositório lá. Em seguida, transfira os dados do repo para o compartilhamento 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/
    
por bgStack15 24.02.2016 / 21:02

1 resposta

2

Eu me deparei com esse problema, e parece que alguns outros também estão. O fator comum é que nossos diretórios de repositório são montados em um compartilhamento CIFS com acesso RW.

Por este BugZilla RedHat: link

O que funcionou para mim foi modificar meu arquivo /etc/fstab/ para incluir nobrl em minha declaração 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

Após realizar uma reinicialização, confirme que o sistema de arquivos está montado a partir de uma inicialização a frio, createrepo funcionou bem.

A opção nobrl remove bloqueios de intervalo de bytes de ser aplicado contra o sistema de arquivos montado, que permite que createrepo atualize / acesse com êxito o banco de dados SQLite sem tentar e não conseguir obter um bloqueio.

    
por 19.04.2016 / 17:14