Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
L
lxc
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Chen Yisong
lxc
Commits
bad69158
Commit
bad69158
authored
Nov 30, 2008
by
dlezcano
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
*** empty log message ***
parent
ea39e0c2
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
286 additions
and
0 deletions
+286
-0
lxc-debian.in
scripts/lxc-debian.in
+286
-0
No files found.
scripts/lxc-debian.in
0 → 100755
View file @
bad69158
#!/bin/bash
# set -ex
NAME
=
"debian"
CONFFILE
=
"lxc.conf"
MNTFILE
=
"mount.conf"
UTSNAME
=
IPV4
=
"172.20.0.21"
GATEWAY
=
"172.20.0.1"
INTERFACES
=
"/etc/network/interfaces"
INITTAB
=
"/etc/inittab"
HOSTNAME
=
"/etc/hostname"
FSTAB
=
"/etc/fstab"
CACHE
=
"/var/cache/lxc/debian"
create
()
{
# choose a container name, default is 'debian'
echo
-n
"What is the name for the container ? [
$NAME
] "
read
_NAME_
if
[
!
-z
"
$_NAME_
"
]
;
then
NAME
=
$_NAME_
fi
# choose a hostname, default is the container name
echo
-n
"What hostname do you wish for this container ? [
$NAME
] "
read
_UTSNAME_
if
[
!
-z
"
$_UTSNAME_
"
]
;
then
UTSNAME
=
$_UTSNAME_
else
UTSNAME
=
$NAME
fi
# choose an ipv4 address, better to choose the same network than
# your host
echo
-n
"What IP address do you wish for this container ? [
$IPV4
] "
read
_IPV4_
if
[
!
-z
"
$_IPV4_
"
]
;
then
IPV4
=
$_IPV4_
fi
# choose the gateway ip address
echo
-n
"What is the gateway IP address ? [
$GATEWAY
] "
read
_GATEWAY_
if
[
!
-z
"
$_GATEWAY_
"
]
;
then
GATEWAY
=
$_GATEWAY_
fi
# the rootfs name will be build with the container name
ROOTFS
=
"./rootfs.
$NAME
"
# check if the rootfs does already exist
if
[
!
-e
"
$ROOTFS
"
]
;
then
(
flock
-n
-x
200
RES
=
$?
if
[
"
$RES
"
!=
"0"
]
;
then
echo
"Cache repository is busy."
break
fi
echo
"Choose your architecture"
select
ARCH
in
amd64 i386
;
do
echo
"Architecture
$ARCH
selected"
break
;
done
# check the mini debian was not already downloaded
echo
-n
"Checking cache download ..."
if
[
!
-e
"
$CACHE
/rootfs-
$ARCH
"
]
;
then
echo
"not cached"
mkdir
-p
"
$CACHE
/rootfs-
$ARCH
"
# download a mini debian into a cache
echo
"Downloading debian minimal ..."
debootstrap
--verbose
--variant
=
minbase
--arch
=
$ARCH
\
--include
apache,netbase,net-tools,iproute,openssh-server
\
etch
$CACHE
/rootfs-
$ARCH
http://ftp.debian.org/debian
RESULT
=
$?
if
[
"
$RESULT
"
!=
"0"
]
;
then
echo
"Failed to download the rootfs, aborting."
exit
1
fi
echo
"Download complete."
else
echo
"Found."
fi
# make a local copy of the minidebian
echo
-n
"Copying rootfs ..."
cp
-a
$CACHE
/rootfs-
$ARCH
$ROOTFS
&&
echo
"Done."
||
exit
)
200>/var/lock/subsys/lxc
fi
########################################
# lxc configuration files
########################################
# lxc mount point
cat
<<
EOF
>
$MNTFILE
/dev
$(
pwd
)
/
$ROOTFS
/dev none bind 0 0
/dev/pts
$(
pwd
)
/
$ROOTFS
/dev/pts none bind 0 0
/etc/resolv.conf
$(
pwd
)
/
$ROOTFS
/etc/resolv.conf none ro,bind 0 0
EOF
# lxc configuration
cat
<<
EOF
>
$CONFFILE
lxc.utsname =
$UTSNAME
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
lxc.network.name = eth0
lxc.mount =
$MNTFILE
lxc.rootfs =
$ROOTFS
EOF
########################################
# rootfs configuration files tweak
########################################
# inittab
cat
<<
EOF
>
$ROOTFS
/
$INITTAB
id:3:initdefault:
si::sysinit:/etc/init.d/rcS
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
# Normally not reached, but fallthrough in case of emergency.
z6:6:respawn:/sbin/sulogin
1:2345:respawn:/sbin/getty 38400 console
EOF
# hostname
cat
<<
EOF
>
$ROOTFS
/
$HOSTNAME
$UTSNAME
EOF
# fstab
cat
<<
EOF
>
$ROOTFS
/
$FSTAB
tmpfs /dev/shm tmpfs defaults 0 0
EOF
# network
cat
<<
EOF
>
$ROOTFS
/
$INTERFACES
auto eth0 lo
iface eth0 inet static
address
$IPV4
netmask 255.255.255.0
broadcast 0.0.0.0
up route add default gw
$GATEWAY
iface lo inet loopback
EOF
# create the container object
lxc-create
-n
$NAME
-f
$CONFFILE
# remove the configuration files
rm
-f
$CONFFILE
rm
-f
$MNTFILE
echo
"Done."
echo
-e
"
\n
You can run your container with the 'lxc-start -n
$NAME
'
\n
"
}
destroy
()
{
echo
-n
"What is the name for the container ? [
$NAME
] "
read
_NAME_
if
[
!
-z
"
$_NAME_
"
]
;
then
NAME
=
$_NAME_
fi
lxc-destroy
-n
$NAME
RETVAL
=
$?
if
[
!
$RETVAL
-eq
0
]
;
then
echo
"Failed to destroyed '
$NAME
'"
return
$RETVAL
;
fi
ROOTFS
=
"./rootfs.
$NAME
"
echo
-n
"Shall I remove the rootfs [y/n] ? "
read
if
[
"
$REPLY
"
=
"y"
]
;
then
rm
-rf
$ROOTFS
fi
return
0
}
help
()
{
cat
<<
EOF
This script is a helper to create debian system containers.
The script will create the container configuration file following
the informations submitted interactively with 'lxc-debian create'
The first creation will download, with debootstrap, a debian
minimal and store it into a cache.
The script will copy from the cache the root filesystem to the
current directory.
If there is a problem with the container, (bad configuration for
example), you can destroy the container with 'lxc-debian destroy'
but without removing the rootfs and recreate it again with
'lxc-debian create'.
If you want to create another debian container, call the 'lxc-debian
create' again, specifying another name and new parameters.
At any time you can purge the debian cache download by calling
'lxc-debian purge'
Have fun :)
EOF
}
purge
()
{
if
[
!
-e
$CACHE
]
;
then
exit
0
fi
# lock, so we won't purge while someone is creating a repository
(
flock
-n
-x
200
RES
=
$?
if
[
"
$RES
"
!=
"0"
]
;
then
echo
"Cache repository is busy."
exit
1
fi
echo
-n
"Purging the download cache..."
# I don't use here the variable, just to be sure
# nobody touching the CACHE variable will lead to
# remove the real rootfs '/'.
rm
-rf
/var/cache/lxc/debian/
*
&&
echo
"Done."
||
exit
1
exit
0
)
200>/var/lock/subsys/lxc
}
if
[
"
$(
id
-u
)
"
!=
"0"
]
;
then
echo
"This script should be run as 'root'"
exit
1
fi
case
"
$1
"
in
create
)
create
;;
destroy
)
destroy
;;
help
)
help
;;
purge
)
purge
;;
*
)
echo
"Usage:
$0
{create|destroy|purge|help}"
exit
1
;;
esac
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment