[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: [atomic-devel] Extending Atomic Host and 'rpm-ostree pkg-add'
- From: Daniel J Walsh <dwalsh redhat com>
- To: Jakub Filak <jfilak redhat com>, atomic-devel <atomic-devel projectatomic io>
- Subject: Re: [atomic-devel] Extending Atomic Host and 'rpm-ostree pkg-add'
- Date: Wed, 23 Nov 2016 09:07:20 -0500
Right it would be great if you and Giuseppe could work together on this,
for a prototype to handle using an rpm
package to track files put onto the system using `atomic install`
We should open a public google docs to allow people to comment on the
design. I think both of you are doing
good work, but we could probably work faster if we collaborate.
On 11/23/2016 07:31 AM, Jakub Filak wrote:
> Giuseppe has opened a pull request that adds support for generating an rpm
> package from a system container and enhancing his code to install arbitrary
> files is just a matter of 3 lines in Python.
>
>
> On 11/22/2016 05:08 PM, Daniel J Walsh wrote:
>> Very nice. Probably need some work on the Name field.
>>
>> Do you have the example code?
> The code is available on github: https://github.com/jfilak/af
>
> It's a shell script and it's a bit dummy.
>
>> Does the rpm get built on the host and then installed.
>>
> If the host have rpmbuild command, it does.
>
>> I would be nice if this could all be generated for the developer so the
>> developer
>>
>> does not need to do much to generate the rpm.
>>
> Container developers just need to place their files to /exports/hostfs/ in
> the image and 'af install' can do the rest.
>
>> One interesting idea would be to add a postuninstall to the rpm of
>>
>> atomic uninstall whether
>>
> Add anything you need to %postun via an environment variable:
> https://github.com/jfilak/af/commit/fffd9d73429475930f3c6c3b889a80ed7ad33738
>
>> On 11/22/2016 09:25 AM, Jakub Filak wrote:
>>> 'rpm -qf /some/file/path' must either return a valid package name or exit
>>> with an error code. That's expected behavior of this command.
>>>
>>> 'rpm -qfi /some/file/path' prints out detailed description of the package
>>> that owns the file and this description can contain container details.
>>>
>>> Here is an example of description of an rpm package created by my script:
>>>
>>> Name : C_wether___docker.io-fedora
>>> Version : latest
>>> Release : 0
>>> Architecture: noarch
>>> Install Date: Mon 14 Nov 2016 03:11:20 AM CET
>>> Group : Unspecified
>>> Size : 14
>>> License : None
>>> Signature : (none)
>>> Source RPM : C_weter___docker.io-fedora-latest-0.src.rpm
>>> Build Date : Mon 14 Nov 2016 03:11:20 AM CET
>>> Build Host : 4d7d6e02109a
>>> Relocations : (not relocatable)
>>> URL : https://github.com/jfilak/af
>>> Summary : Host files from docker.io/fedora:latest
>>> Description :
>>> Files delivered by Docker container : wether
>>> The container was created from Docker image : docker.io/fedora:latest
>>>
>>> The package was created by these steps:
>>>
>>> sudo docker run -it --rm --name wether fedora sh
>>> mkdir -p /exports/hostfs/opt/filak/
>>> echo "Hello, world!" > /exports/hostfs/opt/filak/jakub.txt
>>>
>>> In another terminal:
>>> sudo ./af install --rpm wether
>>>
>>>
>>>
>>> On 11/18/2016 05:17 PM, Daniel J Walsh wrote:
>>>> We want admin to some how know that
>>>>
>>>> rpm -qf /etc/systemd/system/continer.service
>>>>
>>>> Was created by CONTAINER-FOOBAR.
>>>>
>>>> Having the container create an rpm on the fly that takes into case the
>>>> name of the container.
>>>>
>>>> On 11/18/2016 10:49 AM, Jakub Filak wrote:
>>>>> Yes, you are true about the chroot. I realized it a bit late and I didn't
>>>>> want to spent too much time on a proof-of-concept script.
>>>>>
>>>>> Could you please tell me more about the attributes you have on mind? I am
>>>>> afraid that I am caught in my use case and I cannot see anything beyond that.
>>>>>
>>>>>
>>>>> On 11/18/2016 04:24 PM, Daniel J Walsh wrote:
>>>>>> I think you should be able to do this totally with a chroot /host
>>>>>>
>>>>>> rather then nsenter.
>>>>>>
>>>>>> A little trick I have been playing with for scripts executed in the chroot.
>>>>>>
>>>>>> Then you could just copy the rpm out of the container on to /host/run
>>>>>> and then execute
>>>>>>
>>>>>> the ./install.sh command to execute the appropriate rpm commands on the
>>>>>> host.
>>>>>>
>>>>>> The difficult part is creating the rpm with attributes back to the
>>>>>> container.
>>>>>>
>>>>>>
>>>>>> On 11/18/2016 09:26 AM, Jakub Filak wrote:
>>>>>>> The script was initially developed on Fedora Rawhide, so it works there.
>>>>>>>
>>>>>>> I had to add a couple of hacks to be able to run it on Atomic. Mainly
>>>>>>> because Atomic does not have rpm-build, which itself has tons of
>>>>>>> dependencies, and I decided to run the script in a container. Soon I found
>>>>>>> out that not only missing rpm-build is a problem but "rpm -i" does not work
>>>>>>> on Atomic. However I overcome this problem with a wrapper for rpm [0].
>>>>>>>
>>>>>>> The bottom line is that to make the script working on the current Atomic,
>>>>>>> you must install rpm-build (possibly in a privileged Fedora container that
>>>>>>> shares PID NS with the host) and issue the below command:
>>>>>>>
>>>>>>> $ PATH="./atomic-host:$PATH" ./af install --rpm <container_name>
>>>>>>>
>>>>>>> On Fedora you just need to run only:
>>>>>>> $ ./af install --rpm <container_name>
>>>>>>>
>>>>>>>
>>>>>>> Full example:
>>>>>>>
>>>>>>> [host] $ docker pull elcolio/etcd
>>>>>>> [host] $ docker run -d --name etcd elcolio/etcd
>>>>>>> [host] $ docker run --privileged --pid=host -it --rm fedora sh
>>>>>>> [cntr] $ dnf install rpm-build git
>>>>>>> [cntr] $ cd tmp && git clone https://github.com/jfilak/af && cd af
>>>>>>> [cntr] $ PATH="./atomic-host:$PATH" ./af install --rpm etcd
>>>>>>> [cntr] $ exit
>>>>>>> [host] $ rpm -qf /etc/etcd.conf
>>>>>>> C_etcd___docker.io_elcolio_etcd-latest.0.noarch
>>>>>>>
>>>>>>> For sake of simplicity, I assume that the /exports/hostfs/etc/etcd.conf file
>>>>>>> exists within the container.
>>>>>>>
>>>>>>>
>>>>>>> Jakub
>>>>>>>
>>>>>>> PS: The script is just a proof of concept that I created over night.
>>>>>>>
>>>>>>>
>>>>>>> 0: https://github.com/jfilak/af/blob/master/atomic-host/rpm
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On 11/18/2016 01:52 PM, Daniel J Walsh wrote:
>>>>>>>> Seems like a simple fix. rpm-ostree should be modified to support file
>>>>>>>> path rpms as well as
>>>>>>>>
>>>>>>>> rpm repositories. But will this work on a traditional rpm based system
>>>>>>>> like RHEL or Fedora
>>>>>>>>
>>>>>>>> Workstation?
>>>>>>>>
>>>>>>>>
>>>>>>>> On 11/18/2016 03:35 AM, Jakub Filak wrote:
>>>>>>>>> I've been playing with privileged containers delivering services for D-Bus
>>>>>>>>> system bus. These D-Bus services must be enabled by a configuration file
>>>>>>>>> placed in the /etc/dbus-1/system.d/ directory. Therefore my containers must
>>>>>>>>> install files on Atomic host and this action creates system files not owned
>>>>>>>>> by any rpm package.
>>>>>>>>>
>>>>>>>>> Last week I wrote a script that creates an intermediate rpm package from
>>>>>>>>> files in the /exports/hostfs/ directory in a container and installs the
>>>>>>>>> package to a host [0]. Unfortunately, the script uses 'ostree admin unlock'
>>>>>>>>> before running 'rpm -i ...', so my changes to rpm database disappear with
>>>>>>>>> reboot. Using 'rpm-ostree pkg-add ...' could make the changes persistent but
>>>>>>>>> the command does not accept local files.
>>>>>>>>>
>>>>>>>>> My question is that will it be possible to install local rpm files via
>>>>>>>>> 'rpm-ostree pkg-add'?
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Jakub
>>>>>>>>>
>>>>>>>>> 0: https://github.com/jfilak/af
>>>>>>>>>
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]