[Fedora-packaging] Directory ownership guidelines

Mattias Ellert mattias.ellert at fysast.uu.se
Mon Mar 23 14:31:02 UTC 2009


Hi!

It was suggested to me to bring this issue to this list.

The packaging guidelines says that a package should not own a directory
that is owned by a package on which it depends.

The packaging guidelines also says that packages should own all
directories needed in order not to leave orphaned directories after a
package de-installation.

The way rpm/yum currently works these guidelines are contradicting and
you must choose which one to implement in your packaging.

My question is - is this a bug in yum/rpm, or a flaw in the packaging
guidelines?

Here is an example that implements the first guideline - and violates
the second - spec file attached.

The spec builds a main package, 8 packages (A-H) that depend on the main
package and 8 devel packages that each depends on one of the packages
(A-H).

If I install all 17 packages and then do "yum remove mytest", all
packages should be removed cleanly if the Requires are influencing the
order the packages are uninstalled, which it must do if both guidelines
is supposed to be implementable simultaneously.

This is not what happens:

[root at localhost ~]# rpm -ivh /home/ellert/rpmbuild/RPMS/i386/mytest-*
Förbereder...              ########################################### [100%]
   1:mytest                 ########################################### [  6%]
   2:mytest-A               ########################################### [ 12%]
   3:mytest-B               ########################################### [ 18%]
   4:mytest-C               ########################################### [ 24%]
   5:mytest-D               ########################################### [ 29%]
   6:mytest-E               ########################################### [ 35%]
   7:mytest-F               ########################################### [ 41%]
   8:mytest-G               ########################################### [ 47%]
   9:mytest-H               ########################################### [ 53%]
  10:mytest-A-devel         ########################################### [ 59%]
  11:mytest-B-devel         ########################################### [ 65%]
  12:mytest-C-devel         ########################################### [ 71%]
  13:mytest-D-devel         ########################################### [ 76%]
  14:mytest-E-devel         ########################################### [ 82%]
  15:mytest-F-devel         ########################################### [ 88%]
  16:mytest-G-devel         ########################################### [ 94%]
  17:mytest-H-devel         ########################################### [100%]
[root at localhost ~]# yum remove mytest
Loaded plugins: refresh-packagekit
Setting up Remove Process
Resolving Dependencies
--> Running transaction check
---> Package mytest.i386 0:1.0-1.fc10 set to be erased
--> Processing Dependency: mytest for package: mytest-A
--> Processing Dependency: mytest for package: mytest-E
--> Processing Dependency: mytest for package: mytest-G
--> Processing Dependency: mytest for package: mytest-B
--> Processing Dependency: mytest for package: mytest-F
--> Processing Dependency: mytest for package: mytest-C
--> Processing Dependency: mytest for package: mytest-D
--> Processing Dependency: mytest for package: mytest-H
--> Running transaction check
---> Package mytest-A.i386 0:1.0-1.fc10 set to be erased
--> Processing Dependency: mytest-A = 1.0-1.fc10 for package: mytest-A-devel
---> Package mytest-B.i386 0:1.0-1.fc10 set to be erased
--> Processing Dependency: mytest-B = 1.0-1.fc10 for package: mytest-B-devel
---> Package mytest-C.i386 0:1.0-1.fc10 set to be erased
--> Processing Dependency: mytest-C = 1.0-1.fc10 for package: mytest-C-devel
---> Package mytest-D.i386 0:1.0-1.fc10 set to be erased
--> Processing Dependency: mytest-D = 1.0-1.fc10 for package: mytest-D-devel
---> Package mytest-E.i386 0:1.0-1.fc10 set to be erased
--> Processing Dependency: mytest-E = 1.0-1.fc10 for package: mytest-E-devel
---> Package mytest-F.i386 0:1.0-1.fc10 set to be erased
--> Processing Dependency: mytest-F = 1.0-1.fc10 for package: mytest-F-devel
---> Package mytest-G.i386 0:1.0-1.fc10 set to be erased
--> Processing Dependency: mytest-G = 1.0-1.fc10 for package: mytest-G-devel
---> Package mytest-H.i386 0:1.0-1.fc10 set to be erased
--> Processing Dependency: mytest-H = 1.0-1.fc10 for package: mytest-H-devel
--> Running transaction check
---> Package mytest-A-devel.i386 0:1.0-1.fc10 set to be erased
---> Package mytest-B-devel.i386 0:1.0-1.fc10 set to be erased
---> Package mytest-C-devel.i386 0:1.0-1.fc10 set to be erased
---> Package mytest-D-devel.i386 0:1.0-1.fc10 set to be erased
---> Package mytest-E-devel.i386 0:1.0-1.fc10 set to be erased
---> Package mytest-F-devel.i386 0:1.0-1.fc10 set to be erased
---> Package mytest-G-devel.i386 0:1.0-1.fc10 set to be erased
---> Package mytest-H-devel.i386 0:1.0-1.fc10 set to be erased
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package                Arch         Version            Repository         Size
================================================================================
Removing:
 mytest                 i386         1.0-1.fc10         installed          0.0 
Removing for dependencies:
 mytest-A               i386         1.0-1.fc10         installed          6.0 
 mytest-A-devel         i386         1.0-1.fc10         installed          7.0 
 mytest-B               i386         1.0-1.fc10         installed          6.0 
 mytest-B-devel         i386         1.0-1.fc10         installed          7.0 
 mytest-C               i386         1.0-1.fc10         installed          6.0 
 mytest-C-devel         i386         1.0-1.fc10         installed          7.0 
 mytest-D               i386         1.0-1.fc10         installed          6.0 
 mytest-D-devel         i386         1.0-1.fc10         installed          7.0 
 mytest-E               i386         1.0-1.fc10         installed          6.0 
 mytest-E-devel         i386         1.0-1.fc10         installed          7.0 
 mytest-F               i386         1.0-1.fc10         installed          6.0 
 mytest-F-devel         i386         1.0-1.fc10         installed          7.0 
 mytest-G               i386         1.0-1.fc10         installed          6.0 
 mytest-G-devel         i386         1.0-1.fc10         installed          7.0 
 mytest-H               i386         1.0-1.fc10         installed          6.0 
 mytest-H-devel         i386         1.0-1.fc10         installed          7.0 

Transaction Summary
================================================================================
Install      0 Package(s)         
Update       0 Package(s)         
Remove      17 Package(s)         

Is this ok [y/N]: y
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Erasing        : mytest-E-devel                                          1/17 
  Erasing        : mytest-H-devel                                          2/17 
  Erasing        : mytest-A                                                3/17 
  Erasing        : mytest-C                                                4/17 
  Erasing        : mytest-D                                                5/17 
  Erasing        : mytest-E                                                6/17 
  Erasing        : mytest-G                                                7/17 
  Erasing        : mytest-H                                                8/17 
  Erasing        : mytest-C-devel                                          9/17 
  Erasing        : mytest-F-devel                                         10/17 
  Erasing        : mytest-F                                               11/17 
  Erasing        : mytest-A-devel                                         12/17 
  Erasing        : mytest-D-devel                                         13/17 
  Erasing        : mytest                                                 14/17 
  Erasing        : mytest-G-devel                                         15/17 
  Erasing        : mytest-B                                               16/17 
  Erasing        : mytest-B-devel                                         17/17 

Removed:
  mytest.i386 0:1.0-1.fc10                                                      

Dependency Removed:
  mytest-A.i386 0:1.0-1.fc10          mytest-A-devel.i386 0:1.0-1.fc10         
  mytest-B.i386 0:1.0-1.fc10          mytest-B-devel.i386 0:1.0-1.fc10         
  mytest-C.i386 0:1.0-1.fc10          mytest-C-devel.i386 0:1.0-1.fc10         
  mytest-D.i386 0:1.0-1.fc10          mytest-D-devel.i386 0:1.0-1.fc10         
  mytest-E.i386 0:1.0-1.fc10          mytest-E-devel.i386 0:1.0-1.fc10         
  mytest-F.i386 0:1.0-1.fc10          mytest-F-devel.i386 0:1.0-1.fc10         
  mytest-G.i386 0:1.0-1.fc10          mytest-G-devel.i386 0:1.0-1.fc10         
  mytest-H.i386 0:1.0-1.fc10          mytest-H-devel.i386 0:1.0-1.fc10         

Complete!


After the removal there are orphaned directories:

[root at localhost ~]# find /usr/share/mytest
/usr/share/mytest
/usr/share/mytest/C
/usr/share/mytest/G
/usr/share/mytest/B
/usr/share/mytest/D
/usr/share/mytest/A
[root at localhost ~]# rpm -q --whatprovides `find /usr/share/mytest`
filen /usr/share/mytest tillhör inget paket
filen /usr/share/mytest/C tillhör inget paket
filen /usr/share/mytest/G tillhör inget paket
filen /usr/share/mytest/B tillhör inget paket
filen /usr/share/mytest/D tillhör inget paket
filen /usr/share/mytest/A tillhör inget paket


-------------- next part --------------
A non-text attachment was scrubbed...
Name: mytest.spec
Type: text/x-rpm-spec
Size: 5241 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/fedora-packaging/attachments/20090323/341f18b9/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 2272 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/fedora-packaging/attachments/20090323/341f18b9/attachment-0001.bin>


More information about the Fedora-packaging mailing list