Coder Social home page Coder Social logo

89luca89 / lilipod Goto Github PK

View Code? Open in Web Editor NEW
270.0 270.0 13.0 2.38 MB

Lilipod is a simple container manager, able to download, unpack and use OCI images from various container registries.

License: GNU General Public License v3.0

Go 99.39% Makefile 0.61%
chroot containers development docker go golang linux nerdctl oci podman registry tools

lilipod's People

Contributors

89luca89 avatar bittner avatar mirkobrombin avatar tusharhero avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

lilipod's Issues

cgroupfs problem

this is just a wild guess, but I'm trying this on Artix linux, the distro like void or alpine has no systemD. The reason I think the problem is related to lilipod is because I remember seeing issues related to cgroupfs with other container systems involving systemD.

I might be 100% wrong and the issue could be something else, I am not a person who knows a lot about containers. If this issue is related to distrobox, then please let me know, so I can go and open the issue there instead (and sorry if that's the case).

$ distrobox enter debian
 Error: could not start entrypoint.
2023/12/19 01:12:03 setup cgroupfs: mkdir /sys/fs/cgroup/container-debian.scope: permission denied

Performance suggestions

I would be interested in seeing a comparison of:

lilipod run --rm -ti
podman run --rm -ti
docker run --rm -ti

to me at least, it's as interesting as exec performance.

Also recommend using hyperfine over time for measuring performance:

$ hyperfine 'sleep 1'
Benchmark 1: sleep 1
  Time (mean ± σ):      1.005 s ±  0.001 s    [User: 0.001 s, System: 0.003 s]
  Range (min … max):    1.004 s …  1.006 s    10 runs

hyperfine gives more detail about average (mean), variance, etc.

But take this with a pinch of salt, just curious. Neat project!

Implement a build command

This is probably possible using buildkit if you're open to adding a dependency or run buildkit inside a container in daemonless mode as described here with a command similar to this:

docker run \
    -it \
    --rm \
    --privileged \
    -v /path/to/dir:/tmp/work \
    --entrypoint buildctl-daemonless.sh \
    moby/buildkit:master \
        build \
        --frontend dockerfile.v0 \
        --local context=/tmp/work \
        --local dockerfile=/tmp/work

Registry mirror support

Hi,

I'd like to use lilipod behind a registry mirror-- but I see no option for setting one for lilipod.

Could you point me in the right direction to pass it a config option. If it's not available, would you consider supporting it as a config flag?

Thanks.

lilipod rm does not work.

I have an image created by distrobox.
If I try to distrobox-rm it, I can still see it in distrobox list, however if I try to delete it again, i get a messege, that there are no containers with that name.
If I try to delete it with lilipod rm, I get the same result.
However I can still see it in lilipod ps -a output.
lilipod rm -a deletes everything successfully

Unable to create container using distrobox create --clone

I am trying to clone existing distrobox container using: distrobox create -v --name neon --clone ubuntu.
It fails with: 2024/05/23 18:43:34 no such object: [ubuntu --format {{.State.Status}}]

I tried using container ID with the same result.
Container ubuntu exists and working correctly.
I am able to create fresh containers.

Seems like lilipod is unable to parse command line when options and arguments are provided in a mixed order.
Eg:
lilipod --log-level debug inspect --type container --format {{.State.Status}} ubuntu - works
lilipod --log-level debug inspect --type container ubuntu --format {{.State.Status}} - fails
Not sure if the fix should come on the lilipod side or distrobox side...

Verbose output:

$ distrobox create -v --name neon --clone ubuntu
+ [ -z ubuntu ]
+ [ -z neon ]
+ [ -z neon ]
+ [ -z  ]
+ uname -n
+ container_hostname=mypc
+ [ 0 -eq 1 ]
+ printf %s mypc
+ wc -m
+ [ 4 -gt 64 ]
+ container_manager=lilipod
+ command -v lilipod
+ [ 1 -ne 0 ]
+ container_manager=lilipod --log-level debug
+ [ 0 -ne 0 ]
+ [ 0 -ne 0 ]
+ [ -n  ]
+ [ -z /usr/bin/distrobox-init ]
+ [ -z /usr/bin/distrobox-export ]
+ [ 0 -ne 0 ]
+ lilipod --log-level debug inspect --type container neon
+ [ -n ubuntu ]
+ get_clone_image
+ lilipod --log-level debug inspect --type container ubuntu --format {{.State.Status}}
2024/05/23 18:44:17 no such object: [ubuntu --format {{.State.Status}}]
+ container_source_status=
+ container_image=

No way to specify image architecture for pull command

Hello. I'm trying to use lilipod as a lightweight container manager for running distrobox on Ubuntu Touch and SailfishOS (mobile Linux distros).

It generally works after few workarounds like a wrapper for missing getsubids (similar to #7) and fixing subuid ranges on host. However for images like registry.opensuse.org/opensuse/tumbleweed:latest there seems to be no way to specify the correct architecture to fetch, and it will default to incompatible amd64 on arm64 host.

I'm not very familiar with OCI tools syntax, so please mention if this can be workarounded like by specifying the arch in the URL.

Runtime error during initial "Starting container"

During initial start, I am seeing the following in the lilipod log:

...
Get:77 http://archive.ubuntu.com/ubuntu noble/main amd64 dbus-user-session amd64 1.14.10-4ubuntu4 [9960 B]
panic: runtime error: index out of range [1] with length 1

goroutine 1 [running]:
github.com/89luca89/lilipod/pkg/logging.ReadLog({0x990060, 0xc0000aa220?}, 0xfffffff1886e0900, 0xfffffff1886e0900, 0x1, 0x0)
/home/user/Develop/src/lilipod/pkg/logging/logging.go:127 +0x6a7
github.com/89luca89/lilipod/cmd.logs(0xc000286008, {0xc0000e0d00?, 0x4?, 0x8ca620?})
/home/user/Develop/src/lilipod/cmd/logs.go:80 +0x2c9
github.com/spf13/cobra.(*Command).execute(0xc000286008, {0xc0000c4060, 0x2, 0x2})
/home/user/Develop/src/lilipod/vendor/github.com/spf13/cobra/command.go:940 +0x882
github.com/spf13/cobra.(*Command).ExecuteC(0xc0001ea908)
/home/user/Develop/src/lilipod/vendor/github.com/spf13/cobra/command.go:1068 +0x3a5
github.com/spf13/cobra.(*Command).Execute(...)
/home/user/Develop/src/lilipod/vendor/github.com/spf13/cobra/command.go:992
main.main()
/home/user/Develop/src/lilipod/main.go:109 +0x5b
...

Otherwise the container seems to be functioning normally, except I can't recall if podman does set the hostname but lilipod surely doesn't.

Container: ubuntu:24.04, lilpod: 0.0.3(68b04f2), distrobox: 0.7.1.0

P.S.
After initial start is done and contaner is running, "lilipod logs" returns nothing. Is that by design?

[Ubuntu 22.04] failed to find dependency getsubids, can't recover

How can I install getsubids on Ubuntu 22.04? I couldn't find it in the repos:

osalbahr@vclvm176-53:~/lilipod$ ./lilipod-linux-amd64
failed to find dependency getsubids, can't recover.
2023/10/08 11:01:06 exec: "getsubids": executable file not found in $PATH
osalbahr@vclvm176-53:~/lilipod$ getsubids
getsubids: command not found
osalbahr@vclvm176-53:~/lilipod$ command_not_found_handle getsubids
getsubids: command not found
osalbahr@vclvm176-53:~/lilipod$ apt-file search getsubids
osalbahr@vclvm176-53:~/lilipod$           

As per the dependencies section, I tried to install uidmap but it doesn't seem to contain getsubids either:

osalbahr@vclvm176-53:~/lilipod$ sudo apt install uidmap
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
uidmap is already the newest version (1:4.8.1-2ubuntu2.1).
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
osalbahr@vclvm176-53:~/lilipod$ getsubids
getsubids: command not found

System info:

                             ....             osalbahr@vclvm176-53 
              .',:clooo:  .:looooo:.          -------------------- 
           .;looooooooc  .oooooooooo'         OS: Ubuntu 22.04.3 LTS x86_64 
        .;looooool:,''.  :ooooooooooc         Host: KVM RHEL 7.6.0 PC (i440FX + PIIX, 1996) 
       ;looool;.         'oooooooooo,         Kernel: 5.15.0-84-generic 
      ;clool'             .cooooooc.  ,,      Uptime: 3 days, 8 hours, 20 mins 
         ...                ......  .:oo,     Packages: 3432 (dpkg), 190 (brew) 
  .;clol:,.                        .loooo'    Shell: bash 5.1.16 
 :ooooooooo,                        'ooool    Resolution: 1024x768 
'ooooooooooo.                        loooo.   Terminal: /dev/pts/1 
'ooooooooool                         coooo.   CPU: 2x Intel (Haswell, IBRS) (2) @ 2.4GHz 
 ,loooooooc.                        .loooo.   GPU: Cirrus Logic QEMU Virtual Machine 
   .,;;;'.                          ;ooooc    Memory: 1.12 GiB / 7.75 GiB (14%) 
       ...                         ,ooool.    Network: 2x Unknown 
    .cooooc.              ..',,'.  .cooo.     BIOS: SeaBIOS 0.0 (04/01/2014) 
      ;ooooo:.           ;oooooooc.  :l.
       .coooooc,..      coooooooooo.                                  
         .:ooooooolc:. .ooooooooooo'                                  
           .':loooooo;  ,oooooooooc
               ..';::c'  .;loooo:'
                             .

Any suggestions?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.