Problems using import --link

Mike Bonnet mikeb at redhat.com
Wed Jul 23 20:46:50 UTC 2008


On Wed, 2008-07-23 at 16:33 -0400, Naveen Gavini wrote:
> Hello all,
> 
> We are trying to bootstrap our new koji setup and when we attempt to 
> import using --link we get the error below.
> The packages that we are attempting to import are on the hub and have 
> been places in /mnt/koji/import (same volume).
> The ownership on the packages is daemon (same as /mnt/koji/) - not sure 
> if this matters.
> 
> 
> sudo koji import --link /mnt/koji/alsa-lib-1.0.14-1.rc4.el5.src.rpm
> 
> Linking rpm to: 
> /mnt/koji/work/cli-import/1216842099.8955669.PLyYLFZS/alsa-lib-1.0.14-1.rc4.el5.src.rpm 
> 
> importing alsa-lib-1.0.14-1.rc4.el5.src.rpm... Fault: <Fault 1: 
> 'Traceback (most recent call last):\n File 
> "/usr/share/koji-hub/kojixmlrpc.py", line 86, in _marshaled_dispatch\n 
> response = self._dispatch(method, params)\n File 
> "/usr/share/koji-hub/kojixmlrpc.py", line 156, in _dispatch\n ret = 
> func(*params,**opts)\n File "/usr/share/koji-hub/kojihub.py", line 4110, 
> in importRPM\n import_rpm_file(fn,rpminfo[\'build\'],rpminfo)\n File 
> "/usr/share/koji-hub/kojihub.py", line 2991, in import_rpm_file\n 
> os.rename(fn,final_path)\nOSError: [Errno 13] Permission denied\nLocals 
> by frame, innermost last\nFrame HandlerDispatch in 
> /usr/lib64/python2.4/site-packages/mod_python/importer.py at line 1537\n 
> req = <mp_request object at 0x2b3497cbd410>\n parent = None\n config = 
> {\'PythonAutoReload\': \'0\', \'PythonDebug\': \'1\'}\n self = 
> <mod_python.apache.CallBack instance at 0x2b3497cb3710>\n cache = <ERROR 
> WHILE PRINTING VALUE>\n default_handler = handler\n phase = 
> PythonHandler\n handler = kojixmlrpc\n hlist = 
> {\'handler\':\'kojixmlrpc\',\'directory\':\'/usr/share/koji-hub/\',\'silent\':0}\n 
> aborted = False\n directory = /usr/share/koji-hub/\n root = 
> /usr/share/koji-hub/\n options = {\'KojiTraceback\': \'extended\', 
> \'KojiDebug\': \'On\', \'EmailDomain\': \'192.168.226.61\', 
> \'KojiWebURL\': \'http://192.168.226.61/koji\ 
> <http://192.168.226.61/koji%5C>', \'LoginCreatesUser\': \'Off\', 
> \'ProxyDNs\': \'/C=US/ST=New Jersey/O=Open System 
> Solutions/CN=192.168.226.61\', \'DNUsernameComponent\': \'CN\', 
> \'KojiDir\': \'/mnt/koji\', \'DBHost\': \'localhost\', \'DBUser\': 
> \'koji\', \'DBName\': \'koji\'}\n result = 500\nFrame _process_target in 
> /usr/lib64/python2.4/site-packages/mod_python/importer.py at line 1229\n 
> req = <mp_request object at 0x2b3497cbd410>\n silent = 0\n default = 
> handler\n handler = kojixmlrpc\n object = <function handler at 
> 0x2b34997152a8>\n module = <module 
> \'_mp_df1c13776110deb1e020020636703560\' from 
> \'/usr/share/koji-hub/kojixmlrpc.py\'>\n directory = 
> /usr/share/koji-hub/\n parts = [\'kojixmlrpc\']\n result = -1\n 
> object_str = handler\n expected = [-1, 0]\n module_name = kojixmlrpc\n 
> path = [\'/usr/share/koji-hub/\']\n config = {\'PythonAutoReload\': 
> \'0\', \'PythonDebug\': \'1\'}\n arg = <mp_request object at 
> 0x2b3497cbd410>\nFrame _execute_target in 
> /usr/lib64/python2.4/site-packages/mod_python/importer.py at line 1128\n 
> one_process = False\n object = <function handler at 0x2b34997152a8>\n 
> req = <mp_request object at 0x2b3497cbd410>\n pdb_debug = 0\n arg = 
> <mp_request object at 0x2b3497cbd410>\n config = {\'PythonAutoReload\': 
> \'0\', \'PythonDebug\': \'1\'}\nFrame handler in 
> /usr/share/koji-hub/kojixmlrpc.py at line 291\n functions = 
> <_mp_4e76479ee7b716cdbf29397025ee2356.RootExports object at 
> 0x2b349c6f08d0>\n profiling = False\n h = 
> <_mp_df1c13776110deb1e020020636703560.ModXMLRPCRequestHandler object at 
> 0x2b349c6f0d10>\n req = <mp_request object at 0x2b3497cbd410>\n 
> hostFunctions = <_mp_4e76479ee7b716cdbf29397025ee2356.HostExports object 
> at 0x2b349c6f0d90>\n opts = {\'KojiTraceback\': \'extended\', 
> \'KojiDebug\': \'On\', \'EmailDomain\': \'192.168.226.61\', 
> \'KojiWebURL\': \'http://192.168.226.61/koji\ 
> <http://192.168.226.61/koji%5C>', \'LoginCreatesUser\': \'Off\', 
> \'ProxyDNs\': \'/C=US/ST=New Jersey/O=Open System 
> Solutions/CN=192.168.226.61\', \'DNUsernameComponent\': \'CN\', 
> \'KojiDir\': \'/mnt/koji\', \'DBHost\': \'localhost\', \'DBUser\': 
> \'koji\', \'DBName\': \'koji\'}\nFrame handle_request in 
> /usr/share/koji-hub/kojixmlrpc.py at line 242\n self = 
> <_mp_df1c13776110deb1e020020636703560.ModXMLRPCRequestHandler object at 
> 0x2b349c6f0d10>\n req = <mp_request object at 0x2b3497cbd410>\nFrame 
> _marshaled_dispatch in /usr/share/koji-hub/kojixmlrpc.py at line 112\n e 
> = [Errno 13] Permission denied\n self = 
> <_mp_df1c13776110deb1e020020636703560.ModXMLRPCRequestHandler object at 
> 0x2b349c6f0d10>\n e_class = exceptions.OSError\n start = 1216842100.35\n 
> faultCode = 1\n params = <ERROR WHILE PRINTING VALUE>\n tb_str = 
> Traceback (most recent call last):\n File 
> "/usr/share/koji-hub/kojixmlrpc.py", line 86, in _marshaled_dispatch\n 
> response = self._dispatch(method, params)\n File 
> "/usr/share/koji-hub/kojixmlrpc.py", line 156, in _dispatch\n ret = 
> func(*params,**opts)\n File "/usr/share/koji-hub/kojihub.py", line 4110, 
> in importRPM\n import_rpm_file(fn,rpminfo[\'build\'],rpminfo)\n File 
> "/usr/share/koji-hub/kojihub.py", line 2991, in import_rpm_file\n 
> os.rename(fn,final_path)\nOSError: [Errno 13] Permission denied\n\n 
> tb_type = extended\n data = <?xml 
> version=\'1.0\'?>\n<methodCall>\n<methodName>importRPM</methodName>\n<params>\n<param>\n<value><string>cli-import/1216842099.8955669.PLyYLFZS</string></value>\n</param>\n<param>\n<value><string>alsa-lib-1.0.14-1.rc4.el5.src.rpm</string></value>\n</param>\n</params>\n</methodCall>\n\n 
> method = importRPM\nFrame _dispatch in /usr/share/koji-hub/kojixmlrpc.py 
> at line 156\n self = 
> <_mp_df1c13776110deb1e020020636703560.ModXMLRPCRequestHandler object at 
> 0x2b349c6f0d10>\n start = 1216842100.38\n params = <ERROR WHILE PRINTING 
> VALUE>\n func = <bound method RootExports.importRPM of 
> <_mp_4e76479ee7b716cdbf29397025ee2356.RootExports object at 
> 0x2b349c6f08d0>>\n method = importRPM\n opts = {}\nFrame importRPM in 
> /usr/share/koji-hub/kojihub.py at line 4110\n uploadpath = 
> /mnt/koji/work\n basename = alsa-lib-1.0.14-1.rc4.el5.src.rpm\n rpminfo 
> = {\'build_id\': 20L, \'brootid\': None, \'sourcepackage\': 1, \'name\': 
> \'alsa-lib\', \'buildtime\': 1194704966, \'id\': 28L, \'epoch\': None, 
> \'version\': \'1.0.14\', \'build\': {\'sourcepackage\': 1, \'name\': 
> \'alsa-lib\', \'buildtime\': 1194704966, \'epoch\': None, \'version\': 
> \'1.0.14\', \'release\': \'1.rc4.el5\', \'sourcerpm\': [], \'arch\': 
> \'src\', \'id\': 20L}, \'release\': \'1.rc4.el5\', \'sourcerpm\': [], 
> \'arch\': \'src\', \'payloadhash\': 
> \'8fa4adb63144d52fc1ceb29f6022b7cb\', \'size\': 796510}\n path = 
> cli-import/1216842099.8955669.PLyYLFZS\n self = 
> <_mp_4e76479ee7b716cdbf29397025ee2356.RootExports object at 
> 0x2b349c6f08d0>\n fn = 
> /mnt/koji/work/cli-import/1216842099.8955669.PLyYLFZS/alsa-lib-1.0.14-1.rc4.el5.src.rpm\nFrame 
> import_rpm_file in /usr/share/koji-hub/kojihub.py at line 2991\n 
> final_path = 
> /mnt/koji/packages/alsa-lib/1.0.14/1.rc4.el5/src/alsa-lib-1.0.14-1.rc4.el5.src.rpm\n 
> rpminfo = {\'build_id\': 20L, \'brootid\': None, \'sourcepackage\': 1, 
> \'name\': \'alsa-lib\', \'buildtime\': 1194704966, \'id\': 28L, 
> \'epoch\': None, \'version\': \'1.0.14\', \'build\': {\'sourcepackage\': 
> 1, \'name\': \'alsa-lib\', \'buildtime\': 1194704966, \'epoch\': None, 
> \'version\': \'1.0.14\', \'release\': \'1.rc4.el5\', \'sourcerpm\': [], 
> \'arch\': \'src\', \'id\': 20L}, \'release\': \'1.rc4.el5\', 
> \'sourcerpm\': [], \'arch\': \'src\', \'payloadhash\': 
> \'8fa4adb63144d52fc1ceb29f6022b7cb\', \'size\': 796510}\n buildinfo = 
> {\'sourcepackage\': 1, \'name\': \'alsa-lib\', \'buildtime\': 
> 1194704966, \'epoch\': None, \'version\': \'1.0.14\', \'release\': 
> \'1.rc4.el5\', \'sourcerpm\': [], \'arch\': \'src\', \'id\': 20L}\n fn = 
> /mnt/koji/work/cli-import/1216842099.8955669.PLyYLFZS/alsa-lib-1.0.14-1.rc4.el5.src.rpm\n'> 

Embedded in that horribly mangled stack trace was the root of the
problem:

File "/usr/share/koji-hub/kojihub.py", line 2991, in import_rpm_file
  os.rename(fn,final_path)
OSError: [Errno 13] Permission denied

The problem is that "koji import --link", while very useful, is kind of
a hack.  In order for it to work, is assumes your httpd is running as
uid 48 (the "apache" user on Fedora) and chown's the directory
under /mnt/koji/work/cli-import to uid 48 so httpd can rename() the file
from that dir to it's final location under /mnt/koji/packages
successfully.  In your case, httpd is running under a different uid, so
that rename fails.

To fix this, I would do 2 things:

1. In /usr/bin/koji, change the last 2 numbers in the line

os.chown(os.path.dirname(dst), 48, 48)  #XXX - hack

to the uid of the "daemon" user (whatever user httpd runs as).

2. Make sure all packages under /mnt/koji/import are owned by the daemon
user before starting the import.

Give that a try, and let me know if you're still running in to errors.





More information about the Fedora-buildsys-list mailing list