coreos / rpm-ostree

⚛📦 Hybrid image/package system with atomic upgrades and package layering
https://coreos.github.io/rpm-ostree
Other
850 stars 191 forks source link

Hardlink conflicts from kubernetes RPMs #1722

Open jlebon opened 5 years ago

jlebon commented 5 years ago

Started investigating this already. Filing it for tracking.

Layering kubernetes-node and kubernetes-client from @jasonbrooks's COPR repo gives:

[root@localhost ~]# rpm-ostree install kubernetes-client kubernetes-node
Checking out tree f98ec8a... done
Enabled rpm-md repositories: updates fedora jasonbrooks-kubernetes
Updating metadata for 'updates': [=============] 100%
rpm-md repo 'updates'; generated: 2018-12-19T02:19:55Z
Updating metadata for 'fedora': [=============] 100%
rpm-md repo 'fedora'; generated: 2018-10-24T22:20:15Z
Updating metadata for 'jasonbrooks-kubernetes': [=============] 100%
rpm-md repo 'jasonbrooks-kubernetes'; generated: 2018-12-20T19:13:08Z
Importing metadata [=============] 100%
Resolving dependencies... done
Will download: 9 packages (71.5 MB)
  Downloading from jasonbrooks-kubernetes: [=============] 100%
  Downloading from fedora: [=============] 100%
Importing (9/9) [=============] 100%
Checking out packages (1/9) [=            ]  11%
error: Checkout kubernetes-node-1.13.1-1.fc29.x86_64: Hardlinking 74/e18b9b826816b39cb671024ae8740a9e83a168c8957ee03859af0d0067a540.file to hyperkube: File exists

hyperkube is hardlinked at RPM build time so they're the same file in both RPMs. Doing a sha256sum on them after extracting from the two RPMs also confirms this. Yet when importing into OSTree, the file gets a different SHA (but the correct size), hence the conflict above. No file caps.

dustymabe commented 5 years ago

Here is another example on 29.20190318.0 (42e8e52) Atomic Host I try to remove docker and then add moby-engine and I get a File exists error:

[root@vanilla-f29-atomic ~]# rpm-ostree override remove docker cockpit-docker
Checking out tree 42e8e52... done                                                        
Resolving dependencies... done                                                                               
Applying 2 overrides                                                 
Processing packages... done                                                                                                                                               
Writing rpmdb... done                                                          
Writing OSTree commit... done                                                                  
Staging deployment... done                         
Removed:                                                              
  cockpit-docker-189-1.fc29.x86_64                        
  docker-2:1.13.1-65.git1185cfd.fc29.x86_64                     
Run "systemctl reboot" to start a reboot                                                    
[root@vanilla-f29-atomic ~]#
[root@vanilla-f29-atomic ~]# rpm-ostree install moby-engine                            
Checking out tree 42e8e52... done                                                                       
Enabled rpm-md repositories: updates fedora
Updating metadata for 'updates'... done              
rpm-md repo 'updates'; generated: 2019-03-19T04:43:55Z          
Updating metadata for 'fedora'... done                                                                                                                                                                                               
rpm-md repo 'fedora'; generated: 2018-10-24T22:20:15Z                                  
Importing rpm-md... done                      
Resolving dependencies... done     
Will download: 1 package (52.3 MB)                  
Downloading from 'updates'... done   
Importing packages... done                           
Applying 2 overrides and 1 overlay                              
Processing packages... done                                                                 
error: Checkout moby-engine-18.06.0-2.ce.git0ffa825.fc29.x86_64: Hardlinking ed/204e6ff39f074dfd3df53a601744ff7f3a6ea4b98c8c89fb3933ea46c1843c.file to docker: File exists
jlebon commented 5 years ago

Hmm, I'm not sure if that's the same thing. In the original scenario, the same file is being imported twice under different hashes, hence the conflict. /usr/bin/docker belongs to docker-common, so you need rpm-ostree override remove docker cockpit-docker docker-common --install moby-engine.

dustymabe commented 5 years ago

Thanks @jlebon !