Commit f4891287edf4283fcd8b4aa8e1cbd895ab34895b

Authored by Antonio Terceiro
1 parent 1dd62c4d
Exists in master and in 90 other branches 3.x, add_sisp_to_chef, add_super_archives_plugin, api_for_colab, automates_core_packing, backup, backup_not_prod, cdtc_configuration, changes_in_buttons_on_content_panel, colab_automated_login, colab_spb_plugin_recipe, colab_widgets_settings, design_validation, dev-lappis, dev_env_minimal, disable_email_dev, docs, fix_breadcrumbs_position, fix_categories_software_link, fix_edit_institution, fix_edit_software_with_another_license, fix_get_license_info, fix_gitlab_assets_permission, fix_list_style_inside_article, fix_list_style_on_folder_elements, fix_members_pagination, fix_merge_request_url, fix_models_translations, fix_no_license, fix_software_api, fix_software_block_migration, fix_software_communities_translations, fix_software_communities_unit_test, fix_style_create_institution_admin_panel, fix_superarchives_imports, fix_sym_links_noosfero, focus_search_field_theme, gov-user-refactoring, gov-user-refactoring-rails4, header_fix, institution_modal_on_rating, kalibro-conf-refactoring, kalibro-processor-package, lxc_settings, margin_fix, mezuro_cookbook, performance, prezento, r3, refactor_download_block, refactor_software_communities, refactor_software_for_sisp, register_page, release-process, release-process-v2, remove-unused-images, remove_backup_emails, remove_broken_theme, remove_secondary_email_from_user, remove_sisp_buttons, removing_super_archives_email, review_message, scope2method, signals_user_noosfero, sisp_catalog_header, sisp_colab_config, sisp_dev, sisp_dev_master, sisp_simple_version, software_as_organization, software_catalog_style_fix, software_communities_html_refactor, software_infos_api, spb_minimal_env, spb_to_rails4, spec_refactor, stable-4.1, stable-4.2, stable-4.x, stable-devel, support_docs, syslog, temp_soft_comm_refactoring, theme_header, theme_javascript_refactory, thread_dropdown, thread_page, update_search_by_categories, update_software_api, update_softwares_boxes

replace lxc-template with one copied from debian-wheezy box

Showing 1 changed file with 182 additions and 127 deletions   Show diff stats
utils/centos6-vagrant-lxc/lxc-template
1 1 #!/bin/bash
2 2  
3   -# This is a modified version of /usr/share/lxc/templates/lxc-download
4   -# that comes with ubuntu-lxc 1.0.0 stable from ppa changed to suit vagrant-lxc needs
  3 +# This is a modified version of /usr/share/lxc/templates/lxc-ubuntu
  4 +# that comes with Ubuntu 13.04 changed to suit vagrant-lxc needs
  5 +
5 6 #
6   -# Copyright © 2014 Stéphane Graber <stgraber@ubuntu.com>
7   -# Copyright © 2014 Fábio Rehm <fgrehm@gmail.com>
  7 +# template script for generating ubuntu container for LXC
  8 +#
  9 +# This script consolidates and extends the existing lxc ubuntu scripts
  10 +#
  11 +
  12 +# Copyright © 2011 Serge Hallyn <serge.hallyn@canonical.com>
  13 +# Copyright © 2010 Wilhelm Meier
  14 +# Author: Wilhelm Meier <wilhelm.meier@fh-kl.de>
  15 +#
  16 +# This program is free software; you can redistribute it and/or modify
  17 +# it under the terms of the GNU General Public License version 2, as
  18 +# published by the Free Software Foundation.
  19 +
  20 +# This program is distributed in the hope that it will be useful,
  21 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
  22 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  23 +# GNU General Public License for more details.
  24 +
  25 +# You should have received a copy of the GNU General Public License along
  26 +# with this program; if not, write to the Free Software Foundation, Inc.,
  27 +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
8 28 #
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
22   -# USA
23   -
24   -set -eu
25   -
26   -LXC_HOOK_DIR="/usr/share/lxc/hooks"
27   -LXC_TEMPLATE_CONFIG="/usr/share/lxc/config"
28   -
29   -LXC_MAPPED_GID=
30   -LXC_MAPPED_UID=
31   -LXC_NAME=
32   -LXC_PATH=
33   -LXC_ROOTFS=
34   -LXC_TARBALL=
35   -LXC_CONFIG=
36   -
37   -usage() {
38   - cat <<EOF
39   -vagrant-lxc default template
40 29  
41   -Required arguments:
42   -[ --tarball <path> ]: The full path of the rootfs tarball
  30 +set -e
43 31  
44   -Optional arguments:
45   -[ --config ]: Configuration file to be used when building the container
46   -[ -h | --help ]: This help message
  32 +if [ -r /etc/default/lxc ]; then
  33 + . /etc/default/lxc
  34 +fi
  35 +
  36 +extract_rootfs()
  37 +{
  38 + tarball=$1
  39 + arch=$2
  40 + rootfs=$3
  41 +
  42 + echo "Extracting $tarball ..."
  43 + mkdir -p $rootfs
  44 + (cd $rootfs && tar xfz $tarball --strip-components=2)
  45 + return 0
  46 +}
  47 +
  48 +install_ubuntu()
  49 +{
  50 + rootfs=$1
  51 + release=$2
  52 + tarball=$3
  53 + mkdir -p /var/lock/subsys/
  54 +
  55 + (
  56 + flock -x 200
  57 + if [ $? -ne 0 ]; then
  58 + echo "Cache repository is busy."
  59 + return 1
  60 + fi
  61 +
  62 + extract_rootfs $tarball $arch $rootfs
  63 + if [ $? -ne 0 ]; then
  64 + echo "Failed to copy rootfs"
  65 + return 1
  66 + fi
  67 +
  68 + return 0
  69 +
  70 + ) 200>/var/lock/subsys/lxc
  71 +
  72 + return $?
  73 +}
  74 +
  75 +copy_configuration()
  76 +{
  77 + path=$1
  78 + rootfs=$2
  79 + name=$3
  80 +
  81 + grep -q "^lxc.rootfs" $path/config 2>/dev/null || echo "lxc.rootfs = $rootfs" >> $path/config
  82 +
  83 + # if there is exactly one veth network entry, make sure it has an
  84 + # associated hwaddr.
  85 + nics=`grep -e '^lxc\.network\.type[ \t]*=[ \t]*veth' $path/config | wc -l`
  86 + if [ $nics -eq 1 ]; then
  87 + grep -q "^lxc.network.hwaddr" $path/config || sed -i -e "/^lxc\.network\.type[ \t]*=[ \t]*veth/a lxc.network.hwaddr = 00:16:3e:$(openssl rand -hex 3| sed 's/\(..\)/\1:/g; s/.$//')" $path/config
  88 + fi
  89 +
  90 + if [ $? -ne 0 ]; then
  91 + echo "Failed to add configuration"
  92 + return 1
  93 + fi
47 94  
48   -LXC internal arguments (do not pass manually!):
49   -[ --name <name> ]: The container name
50   -[ --path <path> ]: The path to the container
51   -[ --rootfs <rootfs> ]: The path to the container's rootfs
52   -[ --mapped-uid <map> ]: A uid map (user namespaces)
53   -[ --mapped-gid <map> ]: A gid map (user namespaces)
54   -EOF
55 95 return 0
56 96 }
57 97  
58   -options=$(getopt -o h -l auth-key:,tarball:,config:,help:,name:,path:,rootfs:,mapped-uid:,mapped-gid: -- "$@")SS
  98 +post_process()
  99 +{
  100 + rootfs=$1
  101 +
  102 + # rmdir /dev/shm for containers that have /run/shm
  103 + # I'm afraid of doing rm -rf $rootfs/dev/shm, in case it did
  104 + # get bind mounted to the host's /run/shm. So try to rmdir
  105 + # it, and in case that fails move it out of the way.
  106 + if [ ! -L $rootfs/dev/shm ] && [ -d $rootfs/run/shm ] && [ -e $rootfs/dev/shm ]; then
  107 + mv $rootfs/dev/shm $rootfs/dev/shm.bak
  108 + ln -s /run/shm $rootfs/dev/shm
  109 + fi
  110 +}
59 111  
  112 +usage()
  113 +{
  114 + cat <<EOF
  115 +$1 -h|--help [-a|--arch] [--trim] [-d|--debug] [--rootfs <rootfs>] [-T|--tarball <rootfs-tarball>
  116 +arch: the container architecture (e.g. amd64): defaults to host arch
  117 +EOF
  118 + return 0
  119 +}
  120 +
  121 +options=$(getopt -o a:b:hp:r:xn:FS:d:C -l arch:,help,path:,release:,trim,name:,flush-cache,auth-key:,debug:,tarball:,rootfs: -- "$@")
60 122 if [ $? -ne 0 ]; then
61 123 usage $(basename $0)
62 124 exit 1
63 125 fi
64 126 eval set -- "$options"
65 127  
  128 +release=precise # Default to the last Ubuntu LTS release for non-Ubuntu systems
  129 +if [ -f /etc/lsb-release ]; then
  130 + . /etc/lsb-release
  131 + if [ "$DISTRIB_ID" = "Ubuntu" ]; then
  132 + release=$DISTRIB_CODENAME
  133 + fi
  134 +fi
  135 +
  136 +arch=$(uname -m)
  137 +
  138 +# Code taken from debootstrap
  139 +if [ -x /usr/bin/dpkg ] && /usr/bin/dpkg --print-architecture >/dev/null 2>&1; then
  140 + arch=`/usr/bin/dpkg --print-architecture`
  141 +elif type udpkg >/dev/null 2>&1 && udpkg --print-architecture >/dev/null 2>&1; then
  142 + arch=`/usr/bin/udpkg --print-architecture`
  143 +else
  144 + arch=$(uname -m)
  145 + if [ "$arch" = "i686" ]; then
  146 + arch="i386"
  147 + elif [ "$arch" = "x86_64" ]; then
  148 + arch="amd64"
  149 + elif [ "$arch" = "armv7l" ]; then
  150 + arch="armel"
  151 + fi
  152 +fi
  153 +
  154 +debug=0
  155 +trim_container=0
  156 +hostarch=$arch
66 157 while true
67 158 do
68 159 case "$1" in
69   - -h|--help) usage $0 && exit 0;;
70   - --config) LXC_CONFIG=$2; shift 2;;
71   - --tarball) LXC_TARBALL=$2; shift 2;;
72   - --name) LXC_NAME=$2; shift 2;;
73   - --path) LXC_PATH=$2; shift 2;;
74   - --rootfs) LXC_ROOTFS=$2; shift 2;;
75   - --mapped-uid) LXC_MAPPED_UID=$2; shift 2;;
76   - --mapped-gid) LXC_MAPPED_GID=$2; shift 2;;
77   - *) break;;
  160 + -h|--help) usage $0 && exit 0;;
  161 + --rootfs) rootfs=$2; shift 2;;
  162 + -p|--path) path=$2; shift 2;;
  163 + -n|--name) name=$2; shift 2;;
  164 + -T|--tarball) tarball=$2; shift 2;;
  165 + -a|--arch) arch=$2; shift 2;;
  166 + -S|--auth-key) auth_key=$2; shift 2;;
  167 + -d|--debug) debug=1; shift 1;;
  168 + --) shift 1; break ;;
  169 + *) break ;;
78 170 esac
79 171 done
80 172  
81   -if [ -z "${LXC_NAME}" ]; then
82   - echo "'name' parameter is required"
83   - exit 1
  173 +if [ $debug -eq 1 ]; then
  174 + set -x
  175 +fi
  176 +
  177 +if [ "$arch" == "i686" ]; then
  178 + arch=i386
84 179 fi
85 180  
86   -if [ -z "${LXC_TARBALL}" ]; then
87   - echo "'tarball' parameter is required"
  181 +if [ $hostarch = "i386" -a $arch = "amd64" ]; then
  182 + echo "can't create amd64 container on i386"
88 183 exit 1
89 184 fi
90 185  
91   -if [ -z "${LXC_PATH}" ]; then
  186 +if [ -z "$path" ]; then
92 187 echo "'path' parameter is required"
93 188 exit 1
94 189 fi
95 190  
96   -if [ -z "${LXC_CONFIG}" ]; then
97   - echo "'config' parameter is required"
  191 +if [ "$(id -u)" != "0" ]; then
  192 + echo "This script should be run as 'root'"
98 193 exit 1
99 194 fi
100 195  
101   -# if $LXC_ROOTFS exists here, it was passed in with --rootfs
102   -if [ -z "${LXC_ROOTFS}" ]; then
103   - config=${LXC_PATH}/config
  196 +# detect rootfs
  197 +config="$path/config"
  198 +# if $rootfs exists here, it was passed in with --rootfs
  199 +if [ -z "$rootfs" ]; then
104 200 if grep -q '^lxc.rootfs' $config 2>/dev/null ; then
105   - LXC_ROOTFS=`grep 'lxc.rootfs =' $config | awk -F= '{ print $2 }'`
  201 + rootfs=`grep 'lxc.rootfs =' $config | awk -F= '{ print $2 }'`
106 202 else
107   - LXC_ROOTFS=$LXC_PATH/rootfs
108   - echo "lxc.rootfs = ${LXC_ROOTFS}" >> $config
  203 + rootfs=$path/rootfs
109 204 fi
110 205 fi
111 206  
112   -# Unpack the rootfs
113   -echo "Unpacking the rootfs"
114   -
115   -mkdir -p /var/lock/subsys
116   -(
117   - flock -x 200
118   - if [ $? -ne 0 ]; then
119   - echo "Cache repository is busy."
120   - exit 1
121   - fi
122   -
123   - mkdir -p ${LXC_ROOTFS}
124   - (cd ${LXC_ROOTFS} && tar xfz ${LXC_TARBALL} --strip-components=2)
125   - if [ $? -ne 0 ]; then
126   - echo "Failed to extract rootfs"
127   - exit 1
128   - fi
129   -
130   -) 200>/var/lock/subsys/lxc
131   -
132   -mkdir -p ${LXC_ROOTFS}/dev/pts/
133   -
134   -## Extract all the network config entries
135   -sed -i -e "/lxc.network/{w ${LXC_PATH}/config-network" -e "d}" \
136   - ${LXC_PATH}/config
137   -
138   -## Extract any other config entry
139   -sed -i -e "/lxc./{w ${LXC_PATH}/config-auto" -e "d}" ${LXC_PATH}/config
140   -
141   -## Add the container-specific config
142   -echo "" >> ${LXC_PATH}/config
143   -echo "##############################################" >> ${LXC_PATH}/config
144   -echo "# Container specific configuration (automatically set)" >> ${LXC_PATH}/config
145   -if [ -e "${LXC_PATH}/config-auto" ]; then
146   - cat ${LXC_PATH}/config-auto >> ${LXC_PATH}/config
147   - rm ${LXC_PATH}/config-auto
148   -fi
149   -echo "lxc.utsname = ${LXC_NAME}" >> ${LXC_PATH}/config
150   -
151   -## Re-add the previously removed network config
152   -if [ -e "${LXC_PATH}/config-network" ]; then
153   - echo "" >> ${LXC_PATH}/config
154   - echo "##############################################" >> ${LXC_PATH}/config
155   - echo "# Network configuration (automatically set)" >> ${LXC_PATH}/config
156   - cat ${LXC_PATH}/config-network >> ${LXC_PATH}/config
157   - rm ${LXC_PATH}/config-network
  207 +install_ubuntu $rootfs $release $tarball
  208 +if [ $? -ne 0 ]; then
  209 + echo "failed to install ubuntu $release"
  210 + exit 1
158 211 fi
159 212  
160   -## Append the defaults
161   -echo "" >> ${LXC_PATH}/config
162   -echo "##############################################" >> ${LXC_PATH}/config
163   -echo "# vagrant-lxc base box specific configuration" >> ${LXC_PATH}/config
164   -cat ${LXC_CONFIG} >> ${LXC_PATH}/config
  213 +copy_configuration $path $rootfs $name $arch
  214 +if [ $? -ne 0 ]; then
  215 + echo "failed write configuration file"
  216 + exit 1
  217 +fi
165 218  
166   -# Empty section for lxc.customize calls from vagrantfile
167   -echo "" >> ${LXC_PATH}/config
168   -echo "##############################################" >> ${LXC_PATH}/config
169   -echo "# vagrant-lxc container specific configuration" >> ${LXC_PATH}/config
  219 +post_process $rootfs $release $trim_container
170 220  
171   -exit 0
  221 +echo ""
  222 +echo "##"
  223 +echo "# The default user is 'vagrant' with password 'vagrant'!"
  224 +echo "# Use the 'sudo' command to run tasks as root in the container."
  225 +echo "##"
  226 +echo ""
... ...