Creating a custom template, based on some existing LXC template after running the instance at least once
Clash Royale CLAN TAG#URR8PPP
up vote
1
down vote
favorite
(Please note that this question is about LXC 1.x, whereas this one is about LXC 2.x/LXD)
I scoured the web for an answer to this one, but couldn't come up with any reasonably non-hacky answer.
What I am looking for is an approach to fashion an existing template a way I'd like to. In particular what I'm after is to customize the upstream Ubuntu cloud image by making various changes in its root FS and adding/changing configuration.
So my current approach is to lxc launch ubuntu:lts CONTAINER
and then use lxc exec CONTAINER -- ...
to run a script I authored (after pushing it into the container) to perform my customizations.
What I get using this approach is a reasonably customized container. Alas, there's a catch. The container at this point has been primed by cloud-init
and it's a container instance, not an image/template.
So this is where I'm at a loss now. What I would need is to turn my container back into an image (should be doable by using lxc publish
) and either undo the changes done to it by cloud-init
or at least "cock" cloud-init
again so it triggers the next time the image is used as source for lxc init
or lxc launch
. Alternatively, maybe there's a way to completely disable cloud-init
when I lxc launch
from the upstream image?
Is there an authoritative way? Even though I looked through all kinds of documentation, including the Markdown documentation in the LXD repository as well as the blog series by Stéphane Graber (LXD project lead), especially [5/12], I was unable to find a suitable approach. Perhaps I just missed it (that's to say, I'll be happy to read through more documentation if you know some that describes what I need).
LXC version used is 2.20 (i.e. I'm using the LXD frontend).
lxc lxd
add a comment |Â
up vote
1
down vote
favorite
(Please note that this question is about LXC 1.x, whereas this one is about LXC 2.x/LXD)
I scoured the web for an answer to this one, but couldn't come up with any reasonably non-hacky answer.
What I am looking for is an approach to fashion an existing template a way I'd like to. In particular what I'm after is to customize the upstream Ubuntu cloud image by making various changes in its root FS and adding/changing configuration.
So my current approach is to lxc launch ubuntu:lts CONTAINER
and then use lxc exec CONTAINER -- ...
to run a script I authored (after pushing it into the container) to perform my customizations.
What I get using this approach is a reasonably customized container. Alas, there's a catch. The container at this point has been primed by cloud-init
and it's a container instance, not an image/template.
So this is where I'm at a loss now. What I would need is to turn my container back into an image (should be doable by using lxc publish
) and either undo the changes done to it by cloud-init
or at least "cock" cloud-init
again so it triggers the next time the image is used as source for lxc init
or lxc launch
. Alternatively, maybe there's a way to completely disable cloud-init
when I lxc launch
from the upstream image?
Is there an authoritative way? Even though I looked through all kinds of documentation, including the Markdown documentation in the LXD repository as well as the blog series by Stéphane Graber (LXD project lead), especially [5/12], I was unable to find a suitable approach. Perhaps I just missed it (that's to say, I'll be happy to read through more documentation if you know some that describes what I need).
LXC version used is 2.20 (i.e. I'm using the LXD frontend).
lxc lxd
add a comment |Â
up vote
1
down vote
favorite
up vote
1
down vote
favorite
(Please note that this question is about LXC 1.x, whereas this one is about LXC 2.x/LXD)
I scoured the web for an answer to this one, but couldn't come up with any reasonably non-hacky answer.
What I am looking for is an approach to fashion an existing template a way I'd like to. In particular what I'm after is to customize the upstream Ubuntu cloud image by making various changes in its root FS and adding/changing configuration.
So my current approach is to lxc launch ubuntu:lts CONTAINER
and then use lxc exec CONTAINER -- ...
to run a script I authored (after pushing it into the container) to perform my customizations.
What I get using this approach is a reasonably customized container. Alas, there's a catch. The container at this point has been primed by cloud-init
and it's a container instance, not an image/template.
So this is where I'm at a loss now. What I would need is to turn my container back into an image (should be doable by using lxc publish
) and either undo the changes done to it by cloud-init
or at least "cock" cloud-init
again so it triggers the next time the image is used as source for lxc init
or lxc launch
. Alternatively, maybe there's a way to completely disable cloud-init
when I lxc launch
from the upstream image?
Is there an authoritative way? Even though I looked through all kinds of documentation, including the Markdown documentation in the LXD repository as well as the blog series by Stéphane Graber (LXD project lead), especially [5/12], I was unable to find a suitable approach. Perhaps I just missed it (that's to say, I'll be happy to read through more documentation if you know some that describes what I need).
LXC version used is 2.20 (i.e. I'm using the LXD frontend).
lxc lxd
(Please note that this question is about LXC 1.x, whereas this one is about LXC 2.x/LXD)
I scoured the web for an answer to this one, but couldn't come up with any reasonably non-hacky answer.
What I am looking for is an approach to fashion an existing template a way I'd like to. In particular what I'm after is to customize the upstream Ubuntu cloud image by making various changes in its root FS and adding/changing configuration.
So my current approach is to lxc launch ubuntu:lts CONTAINER
and then use lxc exec CONTAINER -- ...
to run a script I authored (after pushing it into the container) to perform my customizations.
What I get using this approach is a reasonably customized container. Alas, there's a catch. The container at this point has been primed by cloud-init
and it's a container instance, not an image/template.
So this is where I'm at a loss now. What I would need is to turn my container back into an image (should be doable by using lxc publish
) and either undo the changes done to it by cloud-init
or at least "cock" cloud-init
again so it triggers the next time the image is used as source for lxc init
or lxc launch
. Alternatively, maybe there's a way to completely disable cloud-init
when I lxc launch
from the upstream image?
Is there an authoritative way? Even though I looked through all kinds of documentation, including the Markdown documentation in the LXD repository as well as the blog series by Stéphane Graber (LXD project lead), especially [5/12], I was unable to find a suitable approach. Perhaps I just missed it (that's to say, I'll be happy to read through more documentation if you know some that describes what I need).
LXC version used is 2.20 (i.e. I'm using the LXD frontend).
lxc lxd
asked Nov 27 '17 at 15:59
0xC0000022L
7,1101359107
7,1101359107
add a comment |Â
add a comment |Â
1 Answer
1
active
oldest
votes
up vote
0
down vote
On the linked page [5/12] by Stéphane Graber, you can find a second approach:
Manually building an image
Building your own image is also pretty simple.
- Generate a container filesystem. This entirely depends on the distribution youâÂÂre using. For Ubuntu and Debian, it would be by using
debootstrap.
- Configure anything thatâÂÂs needed for the distribution to work properly in a container (if anything is needed).
- Make a tarball of that container filesystem, optionally compress it.
- Write a new metadata.yaml file based on the one described above.
- Create another tarball containing that metadata.yaml file.
- Import those two tarballs as a LXD image with:
This way, you don't have to start the container, before you publish the image. You can start with an existing image:
$ lxc image copy ubuntu:16.04/amd64 local: --alias ubuntu
$ mkdir export-directory
$ lxc image export ubuntu export-directory
$ cd export-directory
$ ls
5f364e2e3f460773a79e9bec2edb5e993d236f035f70267923d43ab22ae3bb62.squashfs
meta-5f364e2e3f460773a79e9bec2edb5e993d236f035f70267923d43ab22ae3bb62.tar.xz
$ mkdir meta squashfs
$ tar -xf *.tar.xz -D meta
$ sudo unsquashfs -f -d squash/ *squashfs
Now you can adjust files or even chroot into the squash directory. Then you can tar both directories and import the adjusted image with:
lxc image import <metadata tarball> <rootfs tarball> --alias my-adjusted-image
Thanks, but here's what I asked for: What I am looking for is an approach to fashion an existing template a way I'd like to. In particular what I'm after is to customize the upstream Ubuntu cloud image by making various changes in its root FS and adding/changing configuration.
â 0xC0000022L
Nov 27 '17 at 21:35
I hope my update will address those requests.
â ctx
Nov 28 '17 at 10:07
add a comment |Â
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
On the linked page [5/12] by Stéphane Graber, you can find a second approach:
Manually building an image
Building your own image is also pretty simple.
- Generate a container filesystem. This entirely depends on the distribution youâÂÂre using. For Ubuntu and Debian, it would be by using
debootstrap.
- Configure anything thatâÂÂs needed for the distribution to work properly in a container (if anything is needed).
- Make a tarball of that container filesystem, optionally compress it.
- Write a new metadata.yaml file based on the one described above.
- Create another tarball containing that metadata.yaml file.
- Import those two tarballs as a LXD image with:
This way, you don't have to start the container, before you publish the image. You can start with an existing image:
$ lxc image copy ubuntu:16.04/amd64 local: --alias ubuntu
$ mkdir export-directory
$ lxc image export ubuntu export-directory
$ cd export-directory
$ ls
5f364e2e3f460773a79e9bec2edb5e993d236f035f70267923d43ab22ae3bb62.squashfs
meta-5f364e2e3f460773a79e9bec2edb5e993d236f035f70267923d43ab22ae3bb62.tar.xz
$ mkdir meta squashfs
$ tar -xf *.tar.xz -D meta
$ sudo unsquashfs -f -d squash/ *squashfs
Now you can adjust files or even chroot into the squash directory. Then you can tar both directories and import the adjusted image with:
lxc image import <metadata tarball> <rootfs tarball> --alias my-adjusted-image
Thanks, but here's what I asked for: What I am looking for is an approach to fashion an existing template a way I'd like to. In particular what I'm after is to customize the upstream Ubuntu cloud image by making various changes in its root FS and adding/changing configuration.
â 0xC0000022L
Nov 27 '17 at 21:35
I hope my update will address those requests.
â ctx
Nov 28 '17 at 10:07
add a comment |Â
up vote
0
down vote
On the linked page [5/12] by Stéphane Graber, you can find a second approach:
Manually building an image
Building your own image is also pretty simple.
- Generate a container filesystem. This entirely depends on the distribution youâÂÂre using. For Ubuntu and Debian, it would be by using
debootstrap.
- Configure anything thatâÂÂs needed for the distribution to work properly in a container (if anything is needed).
- Make a tarball of that container filesystem, optionally compress it.
- Write a new metadata.yaml file based on the one described above.
- Create another tarball containing that metadata.yaml file.
- Import those two tarballs as a LXD image with:
This way, you don't have to start the container, before you publish the image. You can start with an existing image:
$ lxc image copy ubuntu:16.04/amd64 local: --alias ubuntu
$ mkdir export-directory
$ lxc image export ubuntu export-directory
$ cd export-directory
$ ls
5f364e2e3f460773a79e9bec2edb5e993d236f035f70267923d43ab22ae3bb62.squashfs
meta-5f364e2e3f460773a79e9bec2edb5e993d236f035f70267923d43ab22ae3bb62.tar.xz
$ mkdir meta squashfs
$ tar -xf *.tar.xz -D meta
$ sudo unsquashfs -f -d squash/ *squashfs
Now you can adjust files or even chroot into the squash directory. Then you can tar both directories and import the adjusted image with:
lxc image import <metadata tarball> <rootfs tarball> --alias my-adjusted-image
Thanks, but here's what I asked for: What I am looking for is an approach to fashion an existing template a way I'd like to. In particular what I'm after is to customize the upstream Ubuntu cloud image by making various changes in its root FS and adding/changing configuration.
â 0xC0000022L
Nov 27 '17 at 21:35
I hope my update will address those requests.
â ctx
Nov 28 '17 at 10:07
add a comment |Â
up vote
0
down vote
up vote
0
down vote
On the linked page [5/12] by Stéphane Graber, you can find a second approach:
Manually building an image
Building your own image is also pretty simple.
- Generate a container filesystem. This entirely depends on the distribution youâÂÂre using. For Ubuntu and Debian, it would be by using
debootstrap.
- Configure anything thatâÂÂs needed for the distribution to work properly in a container (if anything is needed).
- Make a tarball of that container filesystem, optionally compress it.
- Write a new metadata.yaml file based on the one described above.
- Create another tarball containing that metadata.yaml file.
- Import those two tarballs as a LXD image with:
This way, you don't have to start the container, before you publish the image. You can start with an existing image:
$ lxc image copy ubuntu:16.04/amd64 local: --alias ubuntu
$ mkdir export-directory
$ lxc image export ubuntu export-directory
$ cd export-directory
$ ls
5f364e2e3f460773a79e9bec2edb5e993d236f035f70267923d43ab22ae3bb62.squashfs
meta-5f364e2e3f460773a79e9bec2edb5e993d236f035f70267923d43ab22ae3bb62.tar.xz
$ mkdir meta squashfs
$ tar -xf *.tar.xz -D meta
$ sudo unsquashfs -f -d squash/ *squashfs
Now you can adjust files or even chroot into the squash directory. Then you can tar both directories and import the adjusted image with:
lxc image import <metadata tarball> <rootfs tarball> --alias my-adjusted-image
On the linked page [5/12] by Stéphane Graber, you can find a second approach:
Manually building an image
Building your own image is also pretty simple.
- Generate a container filesystem. This entirely depends on the distribution youâÂÂre using. For Ubuntu and Debian, it would be by using
debootstrap.
- Configure anything thatâÂÂs needed for the distribution to work properly in a container (if anything is needed).
- Make a tarball of that container filesystem, optionally compress it.
- Write a new metadata.yaml file based on the one described above.
- Create another tarball containing that metadata.yaml file.
- Import those two tarballs as a LXD image with:
This way, you don't have to start the container, before you publish the image. You can start with an existing image:
$ lxc image copy ubuntu:16.04/amd64 local: --alias ubuntu
$ mkdir export-directory
$ lxc image export ubuntu export-directory
$ cd export-directory
$ ls
5f364e2e3f460773a79e9bec2edb5e993d236f035f70267923d43ab22ae3bb62.squashfs
meta-5f364e2e3f460773a79e9bec2edb5e993d236f035f70267923d43ab22ae3bb62.tar.xz
$ mkdir meta squashfs
$ tar -xf *.tar.xz -D meta
$ sudo unsquashfs -f -d squash/ *squashfs
Now you can adjust files or even chroot into the squash directory. Then you can tar both directories and import the adjusted image with:
lxc image import <metadata tarball> <rootfs tarball> --alias my-adjusted-image
edited Nov 28 '17 at 10:04
answered Nov 27 '17 at 17:11
ctx
1,547314
1,547314
Thanks, but here's what I asked for: What I am looking for is an approach to fashion an existing template a way I'd like to. In particular what I'm after is to customize the upstream Ubuntu cloud image by making various changes in its root FS and adding/changing configuration.
â 0xC0000022L
Nov 27 '17 at 21:35
I hope my update will address those requests.
â ctx
Nov 28 '17 at 10:07
add a comment |Â
Thanks, but here's what I asked for: What I am looking for is an approach to fashion an existing template a way I'd like to. In particular what I'm after is to customize the upstream Ubuntu cloud image by making various changes in its root FS and adding/changing configuration.
â 0xC0000022L
Nov 27 '17 at 21:35
I hope my update will address those requests.
â ctx
Nov 28 '17 at 10:07
Thanks, but here's what I asked for: What I am looking for is an approach to fashion an existing template a way I'd like to. In particular what I'm after is to customize the upstream Ubuntu cloud image by making various changes in its root FS and adding/changing configuration.
â 0xC0000022L
Nov 27 '17 at 21:35
Thanks, but here's what I asked for: What I am looking for is an approach to fashion an existing template a way I'd like to. In particular what I'm after is to customize the upstream Ubuntu cloud image by making various changes in its root FS and adding/changing configuration.
â 0xC0000022L
Nov 27 '17 at 21:35
I hope my update will address those requests.
â ctx
Nov 28 '17 at 10:07
I hope my update will address those requests.
â ctx
Nov 28 '17 at 10:07
add a comment |Â
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f407315%2fcreating-a-custom-template-based-on-some-existing-lxc-template-after-running-th%23new-answer', 'question_page');
);
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password