Hello folks, I finally found the culprit of not being able to successfully import a distro in Beaker. (kudos to Raymond Mancy who told me where to look).
This code snippet in osversion.trigger get_paths() is wrong:
79 found = None 80 while kerneldir != os.path.dirname(tree_path): 81 for x in signatures: 82 d = os.path.join( kerneldir, x) 83 if os.path.exists( d ): 84 found = True 85 break 86 if found: 87 break 88 kerneldir = os.path.dirname(kerneldir) 89 90 return dict( tree_path = tree_path, 91 path = path, 92 package_path = os.path.join(tree_path ,x))
tree_path is .../rhel-server-5.6-x86_64/ kerneldir is .../rhel-server-5.6-x86_64/images/pxeboot/vmlinuz
The while loop starts iterating. In my case it will iterate 3 times. found will always be False because we try to search for meaningful repos under the kerneldir (e.g. Server, Client, etc.) and of course repos are not there.
Then as the last step in the loop we update the kerneldir variable and seek one level up in the directory structure. But when we finally have kerneldir == tree_path the loop exits. (i.e. we never have a chance to find the signature repos).
found is None and x is Client (the last element in the signatures array).
Thus the function returns wrong result. As consequence osversion.trigger will try to decide which distro is this by looking for .../rhel-server-5.6-x86_64/Client/redhat-release* which is not present.
Changing line 82 to something like: d = os.path.join( os.path.dirname(tree_path), x)
helps and distros were imported in cobbler successfully (they were present in the webUI).
However looping through several directories up to the tree root is meaningless IMHO. The files/directories that we try to find (the signatures elements) are always under the tree_path directory and one or two levels above the kerneldir.
I'm not sure how to best fix this issue. Please advise.
This is with beaker-lab-controller-0.6.8-5.el5
-- Alexander.
On 04/19/2011 05:02 PM, Alexander Todorov wrote:
Hello folks, I finally found the culprit of not being able to successfully import a distro in Beaker. (kudos to Raymond Mancy who told me where to look).
This code snippet in osversion.trigger get_paths() is wrong:
79 found = None 80 while kerneldir != os.path.dirname(tree_path): 81 for x in signatures: 82 d = os.path.join( kerneldir, x) 83 if os.path.exists( d ): 84 found = True 85 break 86 if found: 87 break 88 kerneldir = os.path.dirname(kerneldir) 89 90 return dict( tree_path = tree_path, 91 path = path, 92 package_path = os.path.join(tree_path ,x))
tree_path is .../rhel-server-5.6-x86_64/ kerneldir is .../rhel-server-5.6-x86_64/images/pxeboot/vmlinuz
The while loop starts iterating. In my case it will iterate 3 times. found will always be False because we try to search for meaningful repos under the kerneldir (e.g. Server, Client, etc.) and of course repos are not there.
Then as the last step in the loop we update the kerneldir variable and seek one level up in the directory structure. But when we finally have kerneldir == tree_path the loop exits. (i.e. we never have a chance to find the signature repos).
Thats not quite true. we compare kerneldir to dirname(tree_path)
.../rhel-server-5.6-x86_64 != .../
What is under .../rhel-server-5.6-x86_64? Can you give me a directory listing?
found is None and x is Client (the last element in the signatures array).
Thus the function returns wrong result. As consequence osversion.trigger will try to decide which distro is this by looking for .../rhel-server-5.6-x86_64/Client/redhat-release* which is not present.
Changing line 82 to something like: d = os.path.join( os.path.dirname(tree_path), x)
helps and distros were imported in cobbler successfully (they were present in the webUI).
However looping through several directories up to the tree root is meaningless IMHO. The files/directories that we try to find (the signatures elements) are always under the tree_path directory and one or two levels above the kerneldir.
That code was taken from cobbler, and it may not make much sense right now I'm sure there is a variation to the directory layout that requires this.
I'm not sure how to best fix this issue. Please advise.
This is with beaker-lab-controller-0.6.8-5.el5
-- Alexander. _______________________________________________ Beaker-devel mailing list Beaker-devel@lists.fedorahosted.org https://fedorahosted.org/mailman/listinfo/beaker-devel
На 21.04.2011 16:49, Bill Peck написа:
Thats not quite true. we compare kerneldir to dirname(tree_path)
.../rhel-server-5.6-x86_64 != .../
What is under .../rhel-server-5.6-x86_64? Can you give me a directory listing?
Hi Bill, I haven't tested you patch yet since I believe there is first a problem with the get_paths() function. Here is more data.
rhel-server-5.6-x86_64 is where the DVD contents live:
# pwd /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64
# ls Cluster README-es.html README-pt_BR.html RELEASE-NOTES-es.html RELEASE-NOTES-pt_BR.html RELEASE-NOTES-U6-gu.html RELEASE-NOTES-U6-si.html ClusterStorage README-fr.html README-ru.html RELEASE-NOTES-fr.html RELEASE-NOTES-ru.html RELEASE-NOTES-U6-hi.html RELEASE-NOTES-U6-ta.html EULA README-gu.html README-si.html RELEASE-NOTES-gu.html RELEASE-NOTES-si.html RELEASE-NOTES-U6-it.html RELEASE-NOTES-U6-te.html eula.en_US README-hi.html README-ta.html RELEASE-NOTES-hi.html RELEASE-NOTES-ta.html RELEASE-NOTES-U6-ja.html RELEASE-NOTES-U6-zh_CN.html GPL README-it.html README-te.html RELEASE-NOTES-it.html RELEASE-NOTES-te.html RELEASE-NOTES-U6-kn.html RELEASE-NOTES-U6-zh_TW.html images README-ja.html README-zh_CN.html RELEASE-NOTES-ja.html RELEASE-NOTES-U6-as.html RELEASE-NOTES-U6-ko.html RELEASE-NOTES-zh_CN.html isolinux README-kn.html README-zh_TW.html RELEASE-NOTES-kn.html RELEASE-NOTES-U6-bn.html RELEASE-NOTES-U6-ml.html RELEASE-NOTES-zh_TW.html README-as.html README-ko.html RELEASE-NOTES-as.html RELEASE-NOTES-ko.html RELEASE-NOTES-U6-de.html RELEASE-NOTES-U6-mr.html RPM-GPG-KEY-redhat-beta README-bn.html README-ml.html RELEASE-NOTES-bn.html RELEASE-NOTES-ml.html RELEASE-NOTES-U6-en RELEASE-NOTES-U6-or.html RPM-GPG-KEY-redhat-release README-de.html README-mr.html RELEASE-NOTES-de.html RELEASE-NOTES-mr.html RELEASE-NOTES-U6-en.html RELEASE-NOTES-U6-pa.html Server README-en README-or.html RELEASE-NOTES-en RELEASE-NOTES-or.html RELEASE-NOTES-U6-es.html RELEASE-NOTES-U6-pt_BR.html TRANS.TBL README-en.html README-pa.html RELEASE-NOTES-en.html RELEASE-NOTES-pa.html RELEASE-NOTES-U6-fr.html RELEASE-NOTES-U6-ru.html VT
I started from scratch with clean environment and I did:
# cobbler import --path=/net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ --name=RHEL5-Server-U6_nfs-x86_64 --available-as=nfs://repo.example.com:/var/www/html/install/rhel-server-5.6-x86_64/ task started: 2011-04-23_141012_import task started (id=Media import, time=Sat Apr 23 14:10:12 2011) adding distros scanning /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images/pxeboot for distro signature scanning /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images for distro signature scanning /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 for distro signature found content (breed=redhat) at /n creating new distro: RHEL5-Server-U6_nfs-x86_64 creating new profile: RHEL5-Server-U6_nfs-x86_64 scanning /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images/xen for distro signature scanning /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images for distro signature scanning /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 for distro signature found content (breed=redhat) at /n creating new distro: RHEL5-Server-U6_nfs-xen-x86_64 creating new profile: RHEL5-Server-U6_nfs-xen-x86_64 associating kickstarts scanning /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images/xen for distro signature scanning /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images for distro signature scanning /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 for distro signature found content (breed=redhat) at /n scanning /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images/pxeboot for distro signature scanning /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images for distro signature scanning /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 for distro signature found content (breed=redhat) at /n *** TASK COMPLETE ***
Then I slightly modified osversion.trigger to print more debug information. Here's what I changed:
--- osversion.trigger.orig 2011-04-23 14:05:01.000000000 +0300 +++ osversion.trigger 2011-04-23 14:07:16.000000000 +0300 @@ -77,6 +77,7 @@ path = path[path.find('/'):]
found = None + print "DEBUG 1: tree_path=", tree_path, "dirname(tree_path)=", os.path.dirname(tree_path), 'kerneldir=', kerneldir while kerneldir != os.path.dirname(tree_path): for x in signatures: d = os.path.join( kerneldir, x) @@ -86,6 +87,9 @@ if found: break kerneldir = os.path.dirname(kerneldir) + print "DEBUG 2: tree_path=", tree_path, "dirname(tree_path)=", os.path.dirname(tree_path), 'kerneldir=', kerneldir + print "DEBUG 3: tree_path=", tree_path, "dirname(tree_path)=", os.path.dirname(tree_path), 'kerneldir=', kerneldir + print "DEBUG 4: package_path=", os.path.join(tree_path ,x)
return dict( tree_path = tree_path, path = path,
Then I run the modified osversion.trigger to import the distro in Beaker:
# ./osversion.trigger Update TreeRepos for RHEL5-Server-U6_nfs-xen-x86_64 DEBUG 1: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images/xen/vmlinuz DEBUG 2: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images/xen DEBUG 2: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images DEBUG 2: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 DEBUG 3: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 DEBUG 4: package_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/Client Update Family for RHEL5-Server-U6_nfs-xen-x86_64 DEBUG 1: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images/xen/vmlinuz DEBUG 2: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images/xen DEBUG 2: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images DEBUG 2: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 DEBUG 3: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 DEBUG 4: package_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/Client Update TreeRepos for RHEL5-Server-U6_nfs-x86_64 DEBUG 1: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images/pxeboot/vmlinuz DEBUG 2: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images/pxeboot DEBUG 2: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images DEBUG 2: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 DEBUG 3: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 DEBUG 4: package_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/Client Update Family for RHEL5-Server-U6_nfs-x86_64 DEBUG 1: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images/pxeboot/vmlinuz DEBUG 2: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images/pxeboot DEBUG 2: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images DEBUG 2: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 DEBUG 3: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 DEBUG 4: package_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/Client
You can clearly see that in the end the package_path variable which is returned as result from this function is incorrect. There's no rhel-server-5.6-x86_64/Client directory available.
You can also see that kerneldir becomes /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 (i.e. equal to dirname(tree_path)) during the last iterration of the loop and after that the loop exits. This directory is never searched for the existence of the signatures subdirectories.
As a result the distro is not available in Beaker.
-- Alexander.
On 04/23/2011 07:27 AM, Alexander Todorov wrote:
На 21.04.2011 16:49, Bill Peck написа:
Thats not quite true. we compare kerneldir to dirname(tree_path)
.../rhel-server-5.6-x86_64 != .../
What is under .../rhel-server-5.6-x86_64? Can you give me a directory listing?
Hi Bill, I haven't tested you patch yet since I believe there is first a problem with the get_paths() function. Here is more data.
rhel-server-5.6-x86_64 is where the DVD contents live:
# pwd /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64
# ls Cluster README-es.html README-pt_BR.html RELEASE-NOTES-es.html RELEASE-NOTES-pt_BR.html RELEASE-NOTES-U6-gu.html RELEASE-NOTES-U6-si.html ClusterStorage README-fr.html README-ru.html RELEASE-NOTES-fr.html RELEASE-NOTES-ru.html RELEASE-NOTES-U6-hi.html RELEASE-NOTES-U6-ta.html EULA README-gu.html README-si.html RELEASE-NOTES-gu.html RELEASE-NOTES-si.html RELEASE-NOTES-U6-it.html RELEASE-NOTES-U6-te.html eula.en_US README-hi.html README-ta.html RELEASE-NOTES-hi.html RELEASE-NOTES-ta.html RELEASE-NOTES-U6-ja.html RELEASE-NOTES-U6-zh_CN.html GPL README-it.html README-te.html RELEASE-NOTES-it.html RELEASE-NOTES-te.html RELEASE-NOTES-U6-kn.html RELEASE-NOTES-U6-zh_TW.html images README-ja.html README-zh_CN.html RELEASE-NOTES-ja.html RELEASE-NOTES-U6-as.html RELEASE-NOTES-U6-ko.html RELEASE-NOTES-zh_CN.html isolinux README-kn.html README-zh_TW.html RELEASE-NOTES-kn.html RELEASE-NOTES-U6-bn.html RELEASE-NOTES-U6-ml.html RELEASE-NOTES-zh_TW.html README-as.html README-ko.html RELEASE-NOTES-as.html RELEASE-NOTES-ko.html RELEASE-NOTES-U6-de.html RELEASE-NOTES-U6-mr.html RPM-GPG-KEY-redhat-beta README-bn.html README-ml.html RELEASE-NOTES-bn.html RELEASE-NOTES-ml.html RELEASE-NOTES-U6-en RELEASE-NOTES-U6-or.html RPM-GPG-KEY-redhat-release README-de.html README-mr.html RELEASE-NOTES-de.html RELEASE-NOTES-mr.html RELEASE-NOTES-U6-en.html RELEASE-NOTES-U6-pa.html Server README-en README-or.html RELEASE-NOTES-en RELEASE-NOTES-or.html RELEASE-NOTES-U6-es.html RELEASE-NOTES-U6-pt_BR.html TRANS.TBL README-en.html README-pa.html RELEASE-NOTES-en.html RELEASE-NOTES-pa.html RELEASE-NOTES-U6-fr.html RELEASE-NOTES-U6-ru.html VT
I started from scratch with clean environment and I did:
# cobbler import --path=/net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ --name=RHEL5-Server-U6_nfs-x86_64 --available-as=nfs://repo.example.com:/var/www/html/install/rhel-server-5.6-x86_64/
I think the script gets things wrong if you have a trailing / like you do above. I bet if you were to use the following import command it would work. Obviously it should work either way. I'll see what can be done to make that more robust.
# cobbler import --path=/net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 --name=RHEL5-Server-U6_nfs-x86_64 --available-as=nfs://repo.example.com:/var/www/html/install/rhel-server-5.6-x86_64
Notice I removed the trailing slashes..
task started: 2011-04-23_141012_import task started (id=Media import, time=Sat Apr 23 14:10:12 2011) adding distros scanning /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images/pxeboot for distro signature scanning /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images for distro signature scanning /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 for distro signature found content (breed=redhat) at /n creating new distro: RHEL5-Server-U6_nfs-x86_64 creating new profile: RHEL5-Server-U6_nfs-x86_64 scanning /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images/xen for distro signature scanning /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images for distro signature scanning /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 for distro signature found content (breed=redhat) at /n creating new distro: RHEL5-Server-U6_nfs-xen-x86_64 creating new profile: RHEL5-Server-U6_nfs-xen-x86_64 associating kickstarts scanning /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images/xen for distro signature scanning /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images for distro signature scanning /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 for distro signature found content (breed=redhat) at /n scanning /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images/pxeboot for distro signature scanning /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images for distro signature scanning /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 for distro signature found content (breed=redhat) at /n *** TASK COMPLETE ***
Then I slightly modified osversion.trigger to print more debug information. Here's what I changed:
--- osversion.trigger.orig 2011-04-23 14:05:01.000000000 +0300 +++ osversion.trigger 2011-04-23 14:07:16.000000000 +0300 @@ -77,6 +77,7 @@ path = path[path.find('/'):]
found = None
- print "DEBUG 1: tree_path=", tree_path, "dirname(tree_path)=",
os.path.dirname(tree_path), 'kerneldir=', kerneldir while kerneldir != os.path.dirname(tree_path): for x in signatures: d = os.path.join( kerneldir, x) @@ -86,6 +87,9 @@ if found: break kerneldir = os.path.dirname(kerneldir)
print "DEBUG 2: tree_path=", tree_path,
"dirname(tree_path)=", os.path.dirname(tree_path), 'kerneldir=', kerneldir
- print "DEBUG 3: tree_path=", tree_path, "dirname(tree_path)=",
os.path.dirname(tree_path), 'kerneldir=', kerneldir
print "DEBUG 4: package_path=", os.path.join(tree_path ,x)
return dict( tree_path = tree_path, path = path,
Then I run the modified osversion.trigger to import the distro in Beaker:
# ./osversion.trigger Update TreeRepos for RHEL5-Server-U6_nfs-xen-x86_64 DEBUG 1: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images/xen/vmlinuz DEBUG 2: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images/xen DEBUG 2: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images DEBUG 2: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 DEBUG 3: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 DEBUG 4: package_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/Client Update Family for RHEL5-Server-U6_nfs-xen-x86_64 DEBUG 1: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images/xen/vmlinuz DEBUG 2: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images/xen DEBUG 2: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images DEBUG 2: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 DEBUG 3: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 DEBUG 4: package_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/Client Update TreeRepos for RHEL5-Server-U6_nfs-x86_64 DEBUG 1: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images/pxeboot/vmlinuz DEBUG 2: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images/pxeboot DEBUG 2: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images DEBUG 2: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 DEBUG 3: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 DEBUG 4: package_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/Client Update Family for RHEL5-Server-U6_nfs-x86_64 DEBUG 1: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images/pxeboot/vmlinuz DEBUG 2: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images/pxeboot DEBUG 2: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/images DEBUG 2: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 DEBUG 3: tree_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/ dirname(tree_path)= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 kerneldir= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 DEBUG 4: package_path= /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64/Client
You can clearly see that in the end the package_path variable which is returned as result from this function is incorrect. There's no rhel-server-5.6-x86_64/Client directory available.
You can also see that kerneldir becomes /net/repo.example.com/var/www/html/install/rhel-server-5.6-x86_64 (i.e. equal to dirname(tree_path)) during the last iterration of the loop and after that the loop exits. This directory is never searched for the existence of the signatures subdirectories.
As a result the distro is not available in Beaker.
-- Alexander.
On 04/19/2011 05:02 PM, Alexander Todorov wrote:
Hello folks, I finally found the culprit of not being able to successfully import a distro in Beaker. (kudos to Raymond Mancy who told me where to look).
This code snippet in osversion.trigger get_paths() is wrong:
79 found = None 80 while kerneldir != os.path.dirname(tree_path): 81 for x in signatures: 82 d = os.path.join( kerneldir, x) 83 if os.path.exists( d ): 84 found = True 85 break 86 if found: 87 break 88 kerneldir = os.path.dirname(kerneldir) 89 90 return dict( tree_path = tree_path, 91 path = path, 92 package_path = os.path.join(tree_path ,x))
tree_path is .../rhel-server-5.6-x86_64/ kerneldir is .../rhel-server-5.6-x86_64/images/pxeboot/vmlinuz
The while loop starts iterating. In my case it will iterate 3 times. found will always be False because we try to search for meaningful repos under the kerneldir (e.g. Server, Client, etc.) and of course repos are not there.
Then as the last step in the loop we update the kerneldir variable and seek one level up in the directory structure. But when we finally have kerneldir == tree_path the loop exits. (i.e. we never have a chance to find the signature repos).
found is None and x is Client (the last element in the signatures array).
Thus the function returns wrong result. As consequence osversion.trigger will try to decide which distro is this by looking for .../rhel-server-5.6-x86_64/Client/redhat-release* which is not present.
Changing line 82 to something like: d = os.path.join( os.path.dirname(tree_path), x)
helps and distros were imported in cobbler successfully (they were present in the webUI).
However looping through several directories up to the tree root is meaningless IMHO. The files/directories that we try to find (the signatures elements) are always under the tree_path directory and one or two levels above the kerneldir.
I'm not sure how to best fix this issue. Please advise.
This is with beaker-lab-controller-0.6.8-5.el5
-- Alexander. _______________________________________________ Beaker-devel mailing list Beaker-devel@lists.fedorahosted.org https://fedorahosted.org/mailman/listinfo/beaker-devel
Try applying the attached patch. I'm not sure your hitting the same thing but its worth a try.
На 22.04.2011 00:15, Bill Peck написа:
Try applying the attached patch. I'm not sure your hitting the same thing but its worth a try.
I tried your patch on unmodified osversion.trigger and it worked. I started with clean environment (no distros in cobbler and no distros in Beaker). I did cobbler import and then osversion.trigger. Distro appeared in Beaker webUI.
I'm not sure why this patch worked but I still think that get_paths() returns incorrect result. Maybe that simply doesn't matter.
-- Alexander.
beaker-devel@lists.fedorahosted.org