~ubuntu-branches/ubuntu/quantal/lxc/quantal-201208301614

1.2.4 by Guido Trotter
Import upstream version 0.7.1
1
#!/bin/bash
2
3
#
4
# lxc: linux Container library
5
6
# Authors:
7
# Daniel Lezcano <daniel.lezcano@free.fr>
8
9
# This library is free software; you can redistribute it and/or
10
# modify it under the terms of the GNU Lesser General Public
11
# License as published by the Free Software Foundation; either
12
# version 2.1 of the License, or (at your option) any later version.
13
14
# This library is distributed in the hope that it will be useful,
15
# but WITHOUT ANY WARRANTY; without even the implied warranty of
16
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17
# Lesser General Public License for more details.
18
19
# You should have received a copy of the GNU Lesser General Public
20
# License along with this library; if not, write to the Free Software
21
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22
23
install_sshd()
24
{
25
    rootfs=$1
26
27
    tree="\
28
$rootfs/var/run/sshd \
29
$rootfs/var/empty/sshd \
30
$rootfs/var/lib/empty/sshd \
31
$rootfs/etc/ssh \
32
$rootfs/dev/shm \
35 by Serge Hallyn
* debian/rules: use --with-rootfs-path=/usr/lib/lxc/root. (LP: #838410)
33
$rootfs/run/shm \
1.2.4 by Guido Trotter
Import upstream version 0.7.1
34
$rootfs/proc \
35
$rootfs/bin \
36
$rootfs/sbin \
37
$rootfs/usr \
38
$rootfs/tmp \
39
$rootfs/home \
40
$rootfs/root \
41
$rootfs/lib \
42
$rootfs/lib64"
43
44
    mkdir -p $tree
45
    if [ $? -ne 0 ]; then
67 by Serge Hallyn
* 0045-fix-other-templates: lots of template fixes. Make sshd, debian,
46
        return 1
1.2.4 by Guido Trotter
Import upstream version 0.7.1
47
    fi
48
49
    return 0
50
}
51
52
configure_sshd()
53
{
54
    rootfs=$1
55
56
    cat <<EOF > $rootfs/etc/passwd
57
root:x:0:0:root:/root:/bin/bash
58
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
59
EOF
60
61
    cat <<EOF > $rootfs/etc/group
62
root:x:0:root
63
sshd:x:74:
64
EOF
65
66
ssh-keygen -t rsa -f $rootfs/etc/ssh/ssh_host_rsa_key
67
ssh-keygen -t dsa -f $rootfs/etc/ssh/ssh_host_dsa_key
68
69
    # by default setup root password with no password
70
    cat <<EOF > $rootfs/etc/ssh/sshd_config
71
Port 22
72
Protocol 2
73
HostKey /etc/ssh/ssh_host_rsa_key
74
HostKey /etc/ssh/ssh_host_dsa_key
75
UsePrivilegeSeparation yes
76
KeyRegenerationInterval 3600
77
ServerKeyBits 768
78
SyslogFacility AUTH
79
LogLevel INFO
80
LoginGraceTime 120
81
PermitRootLogin yes
82
StrictModes yes
83
RSAAuthentication yes
84
PubkeyAuthentication yes
85
IgnoreRhosts yes
86
RhostsRSAAuthentication no
87
HostbasedAuthentication no
88
PermitEmptyPasswords yes
89
ChallengeResponseAuthentication no
90
EOF
67 by Serge Hallyn
* 0045-fix-other-templates: lots of template fixes. Make sshd, debian,
91
92
    if [ -n "$auth_key" -a -f "$auth_key" ]; then
93
    	u_path="/root/.ssh"
94
    	root_u_path="$rootfs/$u_path"
95
    	mkdir -p $root_u_path
96
    	cp $auth_key "$root_u_path/authorized_keys"
97
    	chown -R 0:0 "$rootfs/$u_path"
98
	chmod 700 "$rootfs/$u_path"
99
100
    	echo "Inserted SSH public key from $auth_key into /home/ubuntu/.ssh/authorized_keys"
101
    fi
102
1.2.4 by Guido Trotter
Import upstream version 0.7.1
103
    return 0
104
}
105
106
copy_configuration()
107
{
108
    path=$1
109
    rootfs=$2
110
    name=$3
111
67 by Serge Hallyn
* 0045-fix-other-templates: lots of template fixes. Make sshd, debian,
112
    cat <<EOF >> $path/config
1.2.4 by Guido Trotter
Import upstream version 0.7.1
113
lxc.utsname = $name
114
lxc.pts = 1024
115
lxc.rootfs = $rootfs
89 by Serge Hallyn
* debian/lxc-default.apparmor: explicitly silence warnings about attempting
116
# uncomment the next line to run the container unconfined:
117
#lxc.aa_profile = unconfined
81 by Serge Hallyn
* add lxc-shutdown command:
118
lxc.mount.entry=/dev dev none ro,bind 0 0
119
lxc.mount.entry=/lib lib none ro,bind 0 0
120
lxc.mount.entry=/bin bin none ro,bind 0 0
121
lxc.mount.entry=/usr usr none ro,bind 0 0
122
lxc.mount.entry=/sbin sbin none ro,bind 0 0
123
lxc.mount.entry=tmpfs var/run/sshd tmpfs mode=0644 0 0
124
lxc.mount.entry=@LXCTEMPLATEDIR@/lxc-sshd sbin/init none bind 0 0
125
lxc.mount.entry=proc proc proc nodev,noexec,nosuid 0 0
1.2.4 by Guido Trotter
Import upstream version 0.7.1
126
EOF
127
67 by Serge Hallyn
* 0045-fix-other-templates: lots of template fixes. Make sshd, debian,
128
    # if no .ipv4 section in config, then have the container run dhcp
129
    grep -q "^lxc.network.ipv4" $path/config || touch $rootfs/run-dhcp
130
131
    if [ "$(uname -m)" = "x86_64" ]; then
132
        cat <<EOF >> $path/config
81 by Serge Hallyn
* add lxc-shutdown command:
133
lxc.mount.entry=/lib64 lib64 none ro,bind 0 0
1.2.4 by Guido Trotter
Import upstream version 0.7.1
134
EOF
67 by Serge Hallyn
* 0045-fix-other-templates: lots of template fixes. Make sshd, debian,
135
    fi
1.2.4 by Guido Trotter
Import upstream version 0.7.1
136
}
137
138
usage()
139
{
140
    cat <<EOF
141
$1 -h|--help -p|--path=<path>
142
EOF
143
    return 0
144
}
145
67 by Serge Hallyn
* 0045-fix-other-templates: lots of template fixes. Make sshd, debian,
146
options=$(getopt -o hp:n:S: -l help,path:,name:,auth-key: -- "$@")
1.2.4 by Guido Trotter
Import upstream version 0.7.1
147
if [ $? -ne 0 ]; then
148
        usage $(basename $0)
67 by Serge Hallyn
* 0045-fix-other-templates: lots of template fixes. Make sshd, debian,
149
    exit 1
1.2.4 by Guido Trotter
Import upstream version 0.7.1
150
fi
151
eval set -- "$options"
152
153
while true
154
do
155
    case "$1" in
156
        -h|--help)      usage $0 && exit 0;;
157
        -p|--path)      path=$2; shift 2;;
67 by Serge Hallyn
* 0045-fix-other-templates: lots of template fixes. Make sshd, debian,
158
    	-n|--name)      name=$2; shift 2;;
159
    	-S|--auth-key)  auth_key=$2; shift 2;;
1.2.4 by Guido Trotter
Import upstream version 0.7.1
160
        --)             shift 1; break ;;
161
        *)              break ;;
162
    esac
163
done
164
165
if [ "$(id -u)" != "0" ]; then
166
    echo "This script should be run as 'root'"
167
    exit 1
168
fi
169
170
if [ $0 == "/sbin/init" ]; then
171
172
    type @LXCINITDIR@/lxc-init
173
    if [ $? -ne 0 ]; then
67 by Serge Hallyn
* 0045-fix-other-templates: lots of template fixes. Make sshd, debian,
174
        echo "'lxc-init is not accessible on the system"
175
        exit 1
1.2.4 by Guido Trotter
Import upstream version 0.7.1
176
    fi
177
178
    type sshd
179
    if [ $? -ne 0 ]; then
67 by Serge Hallyn
* 0045-fix-other-templates: lots of template fixes. Make sshd, debian,
180
        echo "'sshd' is not accessible on the system "
181
        exit 1
182
    fi
183
184
    # run dhcp?
185
    if [ -f /run-dhcp ]; then
186
        type dhclient
187
        if [ $? -ne 0 ]; then
188
            echo "can't find dhclient"
189
            exit 1
190
        fi
191
	touch /etc/fstab
192
        rm -f /dhclient.conf
193
        cat > /dhclient.conf << EOF
194
send host-name "<hostname>";
195
EOF
196
	ifconfig eth0 up
197
        dhclient eth0 -cf /dhclient.conf
1.2.4 by Guido Trotter
Import upstream version 0.7.1
198
    fi
199
200
    exec @LXCINITDIR@/lxc-init -- /usr/sbin/sshd
201
    exit 1
202
fi
203
204
if [ -z "$path" ]; then
205
    echo "'path' parameter is required"
206
    exit 1
207
fi
208
209
rootfs=$path/rootfs
210
211
install_sshd $rootfs
212
if [ $? -ne 0 ]; then
213
    echo "failed to install sshd's rootfs"
214
    exit 1
215
fi
216
217
configure_sshd $rootfs
218
if [ $? -ne 0 ]; then
219
    echo "failed to configure sshd template"
220
    exit 1
221
fi
222
223
copy_configuration $path $rootfs $name
224
if [ $? -ne 0 ]; then
225
    echo "failed to write configuration file"
226
    exit 1
227
fi