toft 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile.lock +1 -1
- data/Rakefile +13 -0
- data/features/checker.feature +1 -1
- data/features/step_definitions/node.rb +2 -2
- data/features/support/env.rb +1 -1
- data/lib/toft/node.rb +7 -6
- data/lib/toft/node_controller.rb +2 -2
- data/lib/toft/version.rb +1 -1
- data/lib/toft.rb +2 -2
- data/scripts/centos/bin/lxc-prepare-host +39 -0
- data/scripts/cookbooks/lxc/files/default/lxc-create-ubuntu-image +26 -12
- data/scripts/cookbooks/lxc/recipes/default.rb +7 -1
- data/scripts/cookbooks/lxc/templates/default/lxc-lucid-chef +11 -7
- data/scripts/cookbooks/lxc/templates/default/lxc-natty-chef +253 -0
- data/scripts/{bash → ubuntu/bin}/install-chef-ubuntu.sh +8 -0
- data/scripts/{bash → ubuntu/bin}/install-rvm.sh +2 -0
- data/scripts/ubuntu/bin/lxc-create-centos-image +56 -0
- data/scripts/ubuntu/bin/lxc-create-ubuntu-image +75 -0
- data/scripts/ubuntu/bin/lxc-prepare-host +24 -0
- data/scripts/ubuntu/lxc-templates/lxc-centos-6 +283 -0
- data/scripts/ubuntu/lxc-templates/lxc-lucid +332 -0
- data/scripts/ubuntu/lxc-templates/lxc-natty +253 -0
- metadata +15 -7
@@ -0,0 +1,253 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
echo "Creating natty node..."
|
4
|
+
|
5
|
+
configure_ubuntu()
|
6
|
+
{
|
7
|
+
rootfs=$1
|
8
|
+
hostname=$2
|
9
|
+
|
10
|
+
# disable selinux in ubuntu
|
11
|
+
mkdir -p $rootfs/selinux
|
12
|
+
echo 0 > $rootfs/selinux/enforce
|
13
|
+
|
14
|
+
# add host root ssh access
|
15
|
+
mkdir $rootfs/root/.ssh
|
16
|
+
chmod 0600 $rootfs/root/.ssh
|
17
|
+
cat <<-EOF > $rootfs/root/.ssh/authorized_keys
|
18
|
+
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCguB7XL3ARzLZYLsIMZe4UUO371m+H5C6V8MhtmSlgXtgHDo7eZhNSm5zCeoyGd32OKeLxuxCCEkXfDDF1aa2a6twcASE3pmWNdnBS7auiOH4P7g+eQ4Aw9v7DdESbIVgHF/NDiAEFFdmApYNM3oCX2FhEVNVKxkkIokUr4axYFJzmJ6Xoi5Sd8JtPC85FZVXqDucZDnHQlOcCkbSo0UOmsWQGwtu8eUHoDeUG0dB8ntb9xlBeLctdrAPhuFYCX8IfFkdcakkzv61ETPbKE6g9wdTDC/TEep7/AHGYmarziRnwKiVOL1jnE1coOJLqy8wOC3dKGmRZy9D4sTc+FRV root insecure public key
|
19
|
+
EOF
|
20
|
+
|
21
|
+
# copy host resolve
|
22
|
+
rm $rootfs/etc/resolv.conf
|
23
|
+
cp /etc/resolv.conf $rootfs/etc/resolv.conf
|
24
|
+
|
25
|
+
# add default route to host
|
26
|
+
cat <<EOF > $rootfs/etc/rc.local
|
27
|
+
#!/bin/sh -e
|
28
|
+
route add default gw 192.168.20.1
|
29
|
+
exit 0
|
30
|
+
EOF
|
31
|
+
|
32
|
+
# disable selinux in ubuntu
|
33
|
+
mkdir -p $rootfs/selinux
|
34
|
+
echo 0 > $rootfs/selinux/enforce
|
35
|
+
|
36
|
+
# set the hostname
|
37
|
+
cat <<EOF > $rootfs/etc/hostname
|
38
|
+
$hostname
|
39
|
+
EOF
|
40
|
+
# set minimal hosts
|
41
|
+
cat <<EOF > $rootfs/etc/hosts
|
42
|
+
127.0.0.1 localhost $hostname
|
43
|
+
EOF
|
44
|
+
|
45
|
+
# suppress log level output for udev
|
46
|
+
sed -i "s/=\"err\"/=0/" $rootfs/etc/udev/udev.conf
|
47
|
+
|
48
|
+
# remove jobs for consoles 5 and 6 since we only create 4 consoles in
|
49
|
+
# this template
|
50
|
+
rm -f $rootfs/etc/init/tty{5,6}.conf
|
51
|
+
|
52
|
+
echo "Set root password to 'root'"
|
53
|
+
echo "root:root" | chroot $rootfs chpasswd
|
54
|
+
|
55
|
+
return 0
|
56
|
+
}
|
57
|
+
|
58
|
+
copy_ubuntu()
|
59
|
+
{
|
60
|
+
cache=$1
|
61
|
+
arch=$2
|
62
|
+
rootfs=$3
|
63
|
+
|
64
|
+
# make a local copy of the miniubuntu
|
65
|
+
echo "Extracting rootfs image to $rootfs ..."
|
66
|
+
mkdir $rootfs
|
67
|
+
tar zxf $cache/natty-$arch.tar.gz -C $rootfs || return 1
|
68
|
+
return 0
|
69
|
+
}
|
70
|
+
|
71
|
+
install_ubuntu()
|
72
|
+
{
|
73
|
+
cache="/var/cache/lxc/ubuntu"
|
74
|
+
rootfs=$1
|
75
|
+
mkdir -p /var/lock/subsys/
|
76
|
+
(
|
77
|
+
flock -n -x 200
|
78
|
+
if [ $? -ne 0 ]; then
|
79
|
+
echo "Cache repository is busy."
|
80
|
+
return 1
|
81
|
+
fi
|
82
|
+
|
83
|
+
arch=$(arch)
|
84
|
+
if [ "$arch" == "x86_64" ]; then
|
85
|
+
arch=amd64
|
86
|
+
fi
|
87
|
+
|
88
|
+
if [ "$arch" == "i686" ]; then
|
89
|
+
arch=i386
|
90
|
+
fi
|
91
|
+
|
92
|
+
echo "Checking image cache in $cache/rootfs-$arch ... "
|
93
|
+
if [ ! -e "$cache/rootfs-$arch" ]; then
|
94
|
+
if [ $? -ne 0 ]; then
|
95
|
+
echo "Failed to download 'ubuntu base'"
|
96
|
+
return 1
|
97
|
+
fi
|
98
|
+
fi
|
99
|
+
|
100
|
+
copy_ubuntu $cache $arch $rootfs
|
101
|
+
if [ $? -ne 0 ]; then
|
102
|
+
echo "Failed to copy rootfs"
|
103
|
+
return 1
|
104
|
+
fi
|
105
|
+
|
106
|
+
return 0
|
107
|
+
|
108
|
+
) 200>/var/lock/subsys/lxc
|
109
|
+
|
110
|
+
return $?
|
111
|
+
}
|
112
|
+
|
113
|
+
copy_configuration()
|
114
|
+
{
|
115
|
+
path=$1
|
116
|
+
rootfs=$2
|
117
|
+
name=$3
|
118
|
+
|
119
|
+
cat <<EOF >> $path/config
|
120
|
+
lxc.utsname = $name
|
121
|
+
|
122
|
+
lxc.tty = 4
|
123
|
+
lxc.pts = 1024
|
124
|
+
lxc.rootfs = $rootfs
|
125
|
+
lxc.mount = $path/fstab
|
126
|
+
|
127
|
+
lxc.cgroup.devices.deny = a
|
128
|
+
# /dev/null and zero
|
129
|
+
lxc.cgroup.devices.allow = c 1:3 rwm
|
130
|
+
lxc.cgroup.devices.allow = c 1:5 rwm
|
131
|
+
# consoles
|
132
|
+
lxc.cgroup.devices.allow = c 5:1 rwm
|
133
|
+
lxc.cgroup.devices.allow = c 5:0 rwm
|
134
|
+
# lxc.cgroup.devices.allow = c 4:0 rwm
|
135
|
+
# lxc.cgroup.devices.allow = c 4:1 rwm
|
136
|
+
# /dev/{,u}random
|
137
|
+
lxc.cgroup.devices.allow = c 1:9 rwm
|
138
|
+
lxc.cgroup.devices.allow = c 1:8 rwm
|
139
|
+
lxc.cgroup.devices.allow = c 136:* rwm
|
140
|
+
lxc.cgroup.devices.allow = c 5:2 rwm
|
141
|
+
# rtc
|
142
|
+
lxc.cgroup.devices.allow = c 254:0 rwm
|
143
|
+
EOF
|
144
|
+
|
145
|
+
cat <<EOF > $path/fstab
|
146
|
+
proc $rootfs/proc proc nodev,noexec,nosuid 0 0
|
147
|
+
devpts $rootfs/dev/pts devpts defaults 0 0
|
148
|
+
sysfs $rootfs/sys sysfs defaults 0 0
|
149
|
+
EOF
|
150
|
+
|
151
|
+
if [ $? -ne 0 ]; then
|
152
|
+
echo "Failed to add configuration"
|
153
|
+
return 1
|
154
|
+
fi
|
155
|
+
|
156
|
+
return 0
|
157
|
+
}
|
158
|
+
|
159
|
+
clean()
|
160
|
+
{
|
161
|
+
cache="/var/cache/lxc/ubuntu"
|
162
|
+
|
163
|
+
if [ ! -e $cache ]; then
|
164
|
+
exit 0
|
165
|
+
fi
|
166
|
+
|
167
|
+
# lock, so we won't purge while someone is creating a repository
|
168
|
+
(
|
169
|
+
flock -n -x 200
|
170
|
+
if [ $? != 0 ]; then
|
171
|
+
echo "Cache repository is busy."
|
172
|
+
exit 1
|
173
|
+
fi
|
174
|
+
|
175
|
+
echo -n "Purging the download cache..."
|
176
|
+
rm --preserve-root --one-file-system -rf $cache && echo "Done." || exit 1
|
177
|
+
exit 0
|
178
|
+
|
179
|
+
) 200>/var/lock/subsys/lxc
|
180
|
+
}
|
181
|
+
|
182
|
+
usage()
|
183
|
+
{
|
184
|
+
cat <<EOF
|
185
|
+
$1 -h|--help -p|--path=<path> --clean
|
186
|
+
EOF
|
187
|
+
return 0
|
188
|
+
}
|
189
|
+
|
190
|
+
options=$(getopt -o hp:n:c -l help,path:,name:,clean -- "$@")
|
191
|
+
if [ $? -ne 0 ]; then
|
192
|
+
usage $(basename $0)
|
193
|
+
exit 1
|
194
|
+
fi
|
195
|
+
eval set -- "$options"
|
196
|
+
|
197
|
+
while true
|
198
|
+
do
|
199
|
+
case "$1" in
|
200
|
+
-h|--help) usage $0 && exit 0;;
|
201
|
+
-p|--path) path=$2; shift 2;;
|
202
|
+
-n|--name) name=$2; shift 2;;
|
203
|
+
-c|--clean) clean=$2; shift 2;;
|
204
|
+
--) shift 1; break ;;
|
205
|
+
*) break ;;
|
206
|
+
esac
|
207
|
+
done
|
208
|
+
|
209
|
+
if [ ! -z "$clean" -a -z "$path" ]; then
|
210
|
+
clean || exit 1
|
211
|
+
exit 0
|
212
|
+
fi
|
213
|
+
|
214
|
+
type debootstrap
|
215
|
+
if [ $? -ne 0 ]; then
|
216
|
+
echo "'debootstrap' command is missing"
|
217
|
+
exit 1
|
218
|
+
fi
|
219
|
+
|
220
|
+
if [ -z "$path" ]; then
|
221
|
+
echo "'path' parameter is required"
|
222
|
+
exit 1
|
223
|
+
fi
|
224
|
+
|
225
|
+
if [ "$(id -u)" != "0" ]; then
|
226
|
+
echo "This script should be run as 'root'"
|
227
|
+
exit 1
|
228
|
+
fi
|
229
|
+
|
230
|
+
rootfs=$path/rootfs
|
231
|
+
|
232
|
+
install_ubuntu $rootfs
|
233
|
+
if [ $? -ne 0 ]; then
|
234
|
+
echo "failed to install ubuntu"
|
235
|
+
exit 1
|
236
|
+
fi
|
237
|
+
|
238
|
+
configure_ubuntu $rootfs $name
|
239
|
+
if [ $? -ne 0 ]; then
|
240
|
+
echo "failed to configure ubuntu for a container"
|
241
|
+
exit 1
|
242
|
+
fi
|
243
|
+
|
244
|
+
copy_configuration $path $rootfs $name
|
245
|
+
if [ $? -ne 0 ]; then
|
246
|
+
echo "failed write configuration file"
|
247
|
+
exit 1
|
248
|
+
fi
|
249
|
+
|
250
|
+
if [ ! -z $clean ]; then
|
251
|
+
clean || exit 1
|
252
|
+
exit 0
|
253
|
+
fi
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: toft
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 3
|
10
|
+
version: 0.0.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Huang Liang
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-10-01 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: rspec
|
@@ -109,12 +109,20 @@ files:
|
|
109
109
|
- lib/toft/node.rb
|
110
110
|
- lib/toft/node_controller.rb
|
111
111
|
- lib/toft/version.rb
|
112
|
-
- scripts/
|
113
|
-
- scripts/bash/install-rvm.sh
|
112
|
+
- scripts/centos/bin/lxc-prepare-host
|
114
113
|
- scripts/cookbooks/lxc/attributes/default.rb
|
115
114
|
- scripts/cookbooks/lxc/files/default/lxc-create-ubuntu-image
|
116
115
|
- scripts/cookbooks/lxc/recipes/default.rb
|
117
116
|
- scripts/cookbooks/lxc/templates/default/lxc-lucid-chef
|
117
|
+
- scripts/cookbooks/lxc/templates/default/lxc-natty-chef
|
118
|
+
- scripts/ubuntu/bin/install-chef-ubuntu.sh
|
119
|
+
- scripts/ubuntu/bin/install-rvm.sh
|
120
|
+
- scripts/ubuntu/bin/lxc-create-centos-image
|
121
|
+
- scripts/ubuntu/bin/lxc-create-ubuntu-image
|
122
|
+
- scripts/ubuntu/bin/lxc-prepare-host
|
123
|
+
- scripts/ubuntu/lxc-templates/lxc-centos-6
|
124
|
+
- scripts/ubuntu/lxc-templates/lxc-lucid
|
125
|
+
- scripts/ubuntu/lxc-templates/lxc-natty
|
118
126
|
- spec/spec_helper.rb
|
119
127
|
- spec/tuft/chef_attributes_spec.rb
|
120
128
|
homepage: https://github.com/exceedhl/toft
|
@@ -146,7 +154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
146
154
|
requirements: []
|
147
155
|
|
148
156
|
rubyforge_project: toft
|
149
|
-
rubygems_version: 1.8.
|
157
|
+
rubygems_version: 1.8.6
|
150
158
|
signing_key:
|
151
159
|
specification_version: 3
|
152
160
|
summary: toft aims to help test infrastructure code such as chef
|