App-LXC-Container

 view release on metacpan or  search on metacpan

README.md  view on Meta::CPAN

# BEST PRACTICES

Especially external packages often haven't all their real dependencies
configured.  For those it is often necessary to manually add some packages
and bind mount points like the following:

## additional packages

Note that the examples are from Debian.

- fontconfig-config (select `/usr/share/fontconfig`)
- locales (select `/usr/share/locale/locale.alias`)

## additional bind mounts

Note that again the examples are from Debian.

- `/usr/share/fonts`

# KNOWN BUGS

Currently the package only supports Debian based distributions.  If you're
using something different please get in touch to extend the support.  (The
framework is already there, but the specific commands are missing, and
that's where I need some help.)  Everything derived from Debian should be
easy to add.  For RPM based distributions I've also already some ideas.

Also only X11 graphic and pulseaudio/pipewire sound has been tested so far.

lib/App/LXC/Container.pm  view on Meta::CPAN

Especially external packages often haven't all their real dependencies
configured.  For those it is often necessary to manually add some packages
and bind mount points like the following:

=head2 additional packages

Note that the examples are from Debian.

=over

=item fontconfig-config (select C</usr/share/fontconfig>)

=item locales (select C</usr/share/locale/locale.alias>)

=back

=head2 additional bind mounts

Note that again the examples are from Debian.

=over

=item C</usr/share/fonts>

=back

=head1 KNOWN BUGS

Currently the package only supports Debian based distributions.  If you're
using something different please get in touch to extend the support.  (The
framework is already there, but the specific commands are missing, and
that's where I need some help.)  Everything derived from Debian should be
easy to add.  For RPM based distributions I've also already some ideas.

lib/App/LXC/Container/Data/common.pm  view on Meta::CPAN

    _check_singleton(shift);
    my @output =
      ('# This is an additional mount configuration file for X11 applications.',
       '# See 40-MNT-default.mounts for more explanations.',
       '',
       '# common:',
       '/dev/dri	create=dir,rw,bind,optional',
       '/usr/share/icons',
       '/usr/share/mime',
       '/usr/share/pixmaps',
       '/var/cache/fontconfig',
       '/var/lib/dbus');
    return @output
}

#########################################################################

=head2 B<content_x11_packages> - return package configuration for X11

    internal object-oriented implementation of the function
    L<App::LXC::Container::Data::content_x11_packages>

=cut

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
sub content_x11_packages($)
{
    _check_singleton(shift);
    my @output =
	('# list of mandatory packages needed for X11',
	 '# See 30-PKG-default.packages for more explanations.',
	 'fontconfig-config');
    return @output;
}

#########################################################################

=head2 depends_on - find package of file

    internal object-oriented implementation of the function
    L<App::LXC::Container::Data::depends_on>

t/02-init.t  view on Meta::CPAN

check_config_file('minimal default filter configuration',
		  $root_dir . '/conf/50-NOT-default.filter',
		  600,
		  \&App::LXC::Container::Data::content_default_filter,
		  '^# common:$.*^/usr/lib\s+nomerge$.*'
		  . '^/var/backups\s+ignore$.*^/var/log\s+empty$');
check_config_file('minimal X11 package configuration',
		  $root_dir . '/conf/60-PKG-X11.packages',
		  100,
		  \&App::LXC::Container::Data::content_x11_packages,
		  '^fontconfig-config$');
check_config_file('minimal X11 mount configuration',
		  $root_dir . '/conf/61-MNT-X11.mounts',
		  200,
		  \&App::LXC::Container::Data::content_x11_mounts,
		  '^/usr/share/icons$');
check_config_file('minimal audio package configuration',
		  $root_dir . '/conf/70-PKG-audio.packages',
		  100,
		  \&App::LXC::Container::Data::content_audio_packages,
		  '^# list of mandatory packages needed for audio$');

t/06-update.t  view on Meta::CPAN

	   '31-PKG-network.packages',
	   '60-PKG-X11.packages',
	   '70-PKG-audio.packages',
	   'u2-PKG-update-test-2.packages',
	   'u1-PKG-update-test-1.packages'],
	  'packages test 4 has correct source list');
if (9 == @{$_->{packages}})
{
    is_deeply($_->{packages},
	      [qw(coreutils dash libc-bin util-linux iproute2
		  fontconfig-config pulseaudio-utils chromium evince)],
	      'packages test 4 has correct content');
}
else
{
    diag(join(' ', 'PACKAGES:', @{$_->{packages}}));
    is_deeply($_->{packages},
	      [qw(coreutils libc-bin util-linux iproute2
		  fontconfig-config pulseaudio-utils chromium evince)],
	      'packages test 4a has correct content');
}
is($_->{package_source}{evince}, 'u2-PKG-update-test-2.packages',
   'packages test 4 evince entry is correct');
is($_->{package_source}{'pulseaudio-utils'}, '70-PKG-audio.packages',
   'packages test 4 evince entry is correct');

#########################################################################
# test for mounts files:
my $path2something = TMP_PATH . '/usr/bin/2something';

t/06-update.t  view on Meta::CPAN

	 'lxc\.mount\.entry = /.+/bin/2something none create=file,ro,bind 0 0',
	 '',
	 '#+ 30-PKG-default\.packages #+',
	 '# coreutils',
	 '# dash',
	 '# libc-bin',
	 '# util-linux',
	 '#+ 31-PKG-network.packages #+',
	 '# iproute2',
	 '#+ 60-PKG-X11.packages #+',
	 '# fontconfig-config',
	 '#+ 70-PKG-audio\.packages #+',
	 '# pulseaudio-utils',
	 '#+ u2-PKG-update-test-2\.packages #+',
	 '# chromium',
	 '# evince',
	 '#+ u1-PKG-update-test-1\.packages #+',
	 '',
	 '#+ empty filters #+',
	 'lxc\.mount\.entry = tmpfs .+/tmp/var/log tmpfs create=dir,rw 0 0',
	 'lxc\.mount\.entry = tmpfs var/log tmpfs create=dir,rw 0 0',

t/mockup-files/dpkg.status  view on Meta::CPAN

Package: bubblewrap
Status: install ok installed
Architecture: amd64
Depends: libc6 (>= 2.34), libcap2 (>= 1:2.10), libselinux1 (>= 3.1~)
Recommends: procps

Package: chromium-common
Status: install ok installed
Architecture: amd64
Depends: libc6 (>= 2.34), libdouble-conversion3 (>= 2.0.0), libjsoncpp25 (>= 1.9.5), libstdc++6 (>= 12), libx11-6, libxnvctrl0, zlib1g (>= 1:1.2.2), x11-utils, xdg-utils
Recommends: upower, libu2f-udev, libgl1-mesa-dri, chromium-sandbox, fonts-liberation, notification-daemon, system-config-printer

Package: dash
Essential: yes
Status: install ok installed
Architecture: amd64
Depends: debianutils (>= 5.6-0.1), dpkg (>= 1.19.1)
Pre-Depends: libc6 (>= 2.34)

Package: dconf-gsettings-backend
Status: install ok installed

t/mockup-files/dpkg.status  view on Meta::CPAN

Architecture: amd64
Depends: evince-common (>= 43.1-2), gsettings-desktop-schemas, libevdocument3-4 (= 43.1-2+b1), libevview3-3 (= 43.1-2+b1), shared-mime-info, dconf-gsettings-backend | gsettings-backend, libatk1.0-0 (>= 1.12.4), libc6 (>= 2.34), libcairo-gobject2 (>= ...
Recommends: default-dbus-session-bus | dbus-session-bus
Suggests: gvfs, nautilus-sendto, poppler-data, unrar
Enhances: nautilus

Package: evince-common
Status: install ok installed
Architecture: all

Package: fontconfig
Status: install ok installed
Architecture: amd64
Depends: libc6 (>= 2.34), libfontconfig1 (>= 2.13.0), libfreetype6 (>= 2.2.1), fontconfig-config

Package: fontconfig-config
Status: install ok installed
Architecture: amd64
Depends: debconf (>= 0.5) | debconf-2.0, fonts-dejavu-core | ttf-bitstream-vera | fonts-liberation | fonts-liberation2 | fonts-croscore | fonts-freefont-otf | fonts-freefont-ttf | fonts-urw-base35 | fonts-texgyre

Package: fonts-croscore
Status: install ok installed
Architecture: all
Suggests: fonts-crosextra-caladea, fonts-crosextra-carlito

Package: fonts-dejavu-core
Status: install ok installed
Architecture: all

Package: fonts-freefont-otf
Status: install ok installed
Architecture: all

Package: fonts-freefont-ttf
Status: install ok installed
Architecture: all

Package: fonts-liberation
Status: install ok installed
Architecture: all

Package: fonts-liberation2
Status: install ok installed
Architecture: all

Package: fonts-texgyre
Status: install ok installed
Architecture: all
Recommends: fonts-texgyre-math (= 20180621-6)

Package: fonts-urw-base35
Status: install ok installed
Architecture: all
Depends: xfonts-utils
Suggests: fonts-freefont-otf | fonts-freefont-ttf, fonts-texgyre

Package: gcc-12-base
Status: install ok installed
Architecture: amd64

Package: gnome-desktop3-data
Status: install ok installed
Architecture: all

Package: gsettings-desktop-schemas

t/mockup-files/dpkg.status  view on Meta::CPAN

Suggests: glibc-doc, debconf | debconf-2.0, libc-l10n, locales, libnss-nis, libnss-nisplus

Package: libcairo-gobject2
Status: install ok installed
Architecture: amd64
Depends: libcairo2 (= 1.16.0-7), libglib2.0-0 (>= 2.14.0)

Package: libcairo2
Status: install ok installed
Architecture: amd64
Depends: libc6 (>= 2.35), libfontconfig1 (>= 2.12.6), libfreetype6 (>= 2.9.1), libpixman-1-0 (>= 0.30.0), libpng16-16 (>= 1.6.2-1), libx11-6, libxcb-render0, libxcb-shm0, libxcb1 (>= 1.6), libxext6, libxrender1, zlib1g (>= 1:1.1.4)

Package: libcap-ng0
Status: install ok installed
Architecture: amd64
Depends: libc6 (>= 2.33)

Package: libcap2
Status: install ok installed
Architecture: amd64
Depends: libc6 (>= 2.34)

t/mockup-files/dpkg.status  view on Meta::CPAN

Package: libfile-find-rule-perl
Status: install ok installed
Architecture: all
Depends: perl:any, libnumber-compare-perl, libtext-glob-perl

Package: libflac12
Status: install ok installed
Architecture: amd64
Depends: libc6 (>= 2.33), libogg0 (>= 1.0rc3)

Package: libfontconfig1
Status: install ok installed
Architecture: amd64
Depends: libc6 (>= 2.33), libexpat1 (>= 2.0.1), libfreetype6 (>= 2.9.1), fontconfig-config (>= 2.14.1-4)

Package: libfontenc1
Status: install ok installed
Architecture: amd64
Depends: libc6 (>= 2.14), zlib1g (>= 1:1.1.4)

Package: libfreetype6
Status: install ok installed
Architecture: amd64
Depends: libbrotli1 (>= 0.6.0), libc6 (>= 2.33), libpng16-16 (>= 1.6.2-1), zlib1g (>= 1:1.1.4)

Package: libfribidi0

t/mockup-files/dpkg.status  view on Meta::CPAN

Architecture: amd64
Depends: libc6 (>= 2.14)

Package: libgs-common
Status: install ok installed
Architecture: all

Package: libgs10
Status: install ok installed
Architecture: amd64
Depends: libgs10-common (= 10.0.0~dfsg-9), poppler-data, libc6 (>= 2.34), libcups2 (>= 2.3~b6), libfontconfig1 (>= 2.12.6), libfreetype6 (>= 2.10.1), libidn12 (>= 1.13), libijs-0.35 (>= 0.35), libjbig2dec0 (>= 0.16+20190905), libjpeg62-turbo (>= 1.3....

Package: libgs10-common
Status: install ok installed
Architecture: all
Depends: fonts-urw-base35 (>= 20200910), libgs-common
Recommends: fonts-droid-fallback

Package: libgspell-1-2
Status: install ok installed
Architecture: amd64
Depends: libgspell-1-common (>= 1.12.0-1), libatk1.0-0 (>= 1.12.4), libc6 (>= 2.4), libcairo-gobject2 (>= 1.10.0), libcairo2 (>= 1.2.4), libenchant-2-2 (>= 2.2.3), libgdk-pixbuf-2.0-0 (>= 2.22.0), libglib2.0-0 (>= 2.44), libgtk-3-0 (>= 3.20), libharf...

Package: libgspell-1-common
Status: install ok installed
Architecture: all

t/mockup-files/dpkg.status  view on Meta::CPAN


Package: libgstreamer1.0-0
Status: install ok installed
Architecture: amd64
Depends: libc6 (>= 2.34), libcap2 (>= 1:2.10), libdw1 (>= 0.126), libglib2.0-0 (>= 2.70.0), libunwind8, libcap2-bin
Suggests: gstreamer1.0-tools

Package: libgtk-3-0
Status: install ok installed
Architecture: amd64
Depends: adwaita-icon-theme, hicolor-icon-theme, shared-mime-info, libatk-bridge2.0-0 (>= 2.15.1), libatk1.0-0 (>= 2.35.1), libc6 (>= 2.34), libcairo-gobject2 (>= 1.14.0), libcairo2 (>= 1.14.0), libcolord2 (>= 0.1.10), libcups2 (>= 1.7.0), libepoxy0 ...
Recommends: libgtk-3-bin, librsvg2-common
Suggests: gvfs

Package: libgtk-3-common
Status: install ok installed
Architecture: all
Depends: dconf-gsettings-backend | gsettings-backend
Recommends: libgtk-3-0

Package: libgxps2

t/mockup-files/dpkg.status  view on Meta::CPAN


Package: libpam0g
Status: install ok installed
Architecture: amd64
Depends: libaudit1 (>= 1:2.2.1), libc6 (>= 2.34), debconf (>= 0.5) | debconf-2.0
Suggests: libpam-doc

Package: libpango-1.0-0
Status: install ok installed
Architecture: amd64
Depends: fontconfig (>= 2.13.0), libc6 (>= 2.14), libfribidi0 (>= 1.0.6), libglib2.0-0 (>= 2.67.3), libharfbuzz0b (>= 5.1.0), libthai0 (>= 0.1.25)

Package: libpangocairo-1.0-0
Status: install ok installed
Architecture: amd64
Depends: libc6 (>= 2.4), libcairo2 (>= 1.12.10), libfontconfig1 (>= 2.13.0), libglib2.0-0 (>= 2.62.0), libharfbuzz0b (>= 2.6.0), libpango-1.0-0 (= 1.50.12+ds-1), libpangoft2-1.0-0 (= 1.50.12+ds-1)

Package: libpangoft2-1.0-0
Status: install ok installed
Architecture: amd64
Depends: libc6 (>= 2.14), libfontconfig1 (>= 2.13.0), libfreetype6 (>= 2.2.1), libglib2.0-0 (>= 2.67.3), libharfbuzz0b (>= 5.1.0), libpango-1.0-0 (= 1.50.12+ds-1)

Package: libpaper1
Status: install ok installed
Architecture: amd64
Depends: libc6 (>= 2.14), debconf (>= 0.5) | debconf-2.0, ucf (>= 0.28), dpkg (>= 1.17.2)
Recommends: libpaper-utils

Package: libpciaccess0
Status: install ok installed
Architecture: amd64

t/mockup-files/dpkg.status  view on Meta::CPAN

Depends: libc6 (>= 2.29), zlib1g (>= 1:1.2.11.dfsg)

Package: libpoppler-glib8
Status: install ok installed
Architecture: amd64
Depends: libpoppler126 (= 22.12.0-2+b1), libc6 (>= 2.34), libcairo2 (>= 1.12.0), libfreetype6 (>= 2.2.1), libglib2.0-0 (>= 2.67.1), libstdc++6 (>= 11)

Package: libpoppler126
Status: install ok installed
Architecture: amd64
Depends: libc6 (>= 2.35), libfontconfig1 (>= 2.12.6), libfreetype6 (>= 2.2.1), libjpeg62-turbo (>= 1.3.1), liblcms2-2 (>= 2.7), libnspr4 (>= 2:4.9-2~), libnss3 (>= 2:3.16), libopenjp2-7 (>= 2.0.0), libpng16-16 (>= 1.6.2-1), libstdc++6 (>= 11), libtif...
Recommends: poppler-data

Package: libproc2-0
Status: install ok installed
Architecture: amd64
Depends: libc6 (>= 2.34), libsystemd0 (>= 209)

Package: libpulse0
Status: install ok installed
Architecture: amd64

t/mockup-files/dpkg.status  view on Meta::CPAN

Depends: libc6 (>= 2.14), libx11-6 (>= 2:1.6.0)

Package: libxfixes3
Status: install ok installed
Architecture: amd64
Depends: libc6 (>= 2.14), libx11-6 (>= 2:1.6.0)

Package: libxft2
Status: install ok installed
Architecture: amd64
Depends: libc6 (>= 2.14), libfontconfig1 (>= 2.12.6), libfreetype6 (>= 2.3.5), libx11-6, libxrender1

Package: libxi6
Status: install ok installed
Architecture: amd64
Depends: libc6 (>= 2.14), libx11-6 (>= 2:1.6.0), libxext6

Package: libxinerama1
Status: install ok installed
Architecture: amd64
Depends: libc6 (>= 2.4), libx11-6 (>= 2:1.6.0), libxext6

t/mockup-files/dpkg.status  view on Meta::CPAN


Package: lsb-base
Status: install ok installed
Architecture: all
Depends: sysvinit-utils (>= 3.05-4~)

Package: poppler-data
Status: install ok installed
Architecture: all
Pre-Depends: dpkg (>= 1.15.6~)
Suggests: poppler-utils, ghostscript, fonts-japanese-mincho | fonts-ipafont-mincho, fonts-japanese-gothic | fonts-ipafont-gothic, fonts-arphic-ukai, fonts-arphic-uming, fonts-nanum (>= 20131007~)
Enhances: ghostscript

Package: procps
Status: install ok installed
Architecture: amd64
Depends: libc6 (>= 2.34), libncursesw6 (>= 6), libproc2-0 (>= 2:4.0.2), libtinfo6 (>= 6), init-system-helpers (>= 1.29~)
Recommends: psmisc

Package: pulseaudio-utils
Status: install ok installed

t/mockup-files/dpkg.status  view on Meta::CPAN

Depends: libaudit1 (>= 1:2.2.1), libc6 (>= 2.34), libsmartcols1 (>= 2.38)

Package: x11-common
Status: install ok installed
Architecture: all
Depends: lsb-base (>= 1.3-9ubuntu2)

Package: x11-utils
Status: install ok installed
Architecture: amd64
Depends: libc6 (>= 2.15), libfontconfig1 (>= 2.12.6), libfontenc1, libgl1, libx11-6, libx11-xcb1 (>= 2:1.6.9), libxaw7, libxcb-shape0, libxcb1 (>= 1.6), libxcomposite1 (>= 1:0.3-1), libxext6, libxft2 (>> 2.1.1), libxi6, libxinerama1, libxkbfile1, lib...
Suggests: mesa-utils

Package: xdg-utils
Status: install ok installed
Architecture: all
Recommends: libfile-mimeinfo-perl, libnet-dbus-perl, libx11-protocol-perl, x11-utils, x11-xserver-utils

Package: xfonts-encodings
Status: install ok installed
Architecture: all
Depends: x11-common

Package: xfonts-utils
Status: install ok installed
Architecture: amd64
Depends: libc6 (>= 2.14), libfontenc1, libfreetype6 (>= 2.2.1), zlib1g (>= 1:1.1.4), x11-common, xfonts-encodings

Package: xkb-data
Status: install ok installed
Architecture: all

Package: zlib1g
Status: install ok installed
Architecture: amd64
Depends: libc6 (>= 2.14)



( run in 0.773 second using v1.01-cache-2.11-cpan-5735350b133 )