This file is indexed.

/usr/sbin/edubuntu-server-build-template is in edubuntu-server-host 15.01build1.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
#!/usr/bin/python3
# -*- coding: utf-8 -*-

# Copyright (C) 2012-2014 Stéphane Graber
# Author: Stéphane Graber <stgraber@ubuntu.com>

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You can find the license on Debian systems in the file
# /usr/share/common-licenses/GPL-2

# NOTE: To remove once the API is stabilized
import warnings
warnings.filterwarnings("ignore", "The python-lxc API isn't yet stable")

import argparse
import gettext
import glob
import os
import shutil
import subprocess
import sys

_ = gettext.gettext
gettext.textdomain("edubuntu-server-build-template")

# Some constants
LXC_LIB = "/var/lib/lxc/"
LXC_CACHE = "/var/cache/lxc/"
LXC_TEMPLATE = "tpl-edubuntu-server"
LXC_CONFIGURE = "/usr/share/edubuntu-server/template-configure"

# Begin parsing the command line
parser = argparse.ArgumentParser(
    description=_("Edubuntu server template builder"),
    formatter_class=argparse.RawTextHelpFormatter)

# Optional arguments
parser.add_argument("--cleanup", action="store_true",
                    help=_("Remove an existing template and start over."))

args = parser.parse_args()

# Basic requirements check
## The user needs to be uid 0
if not os.geteuid() == 0:
    print(_("You must be root to run this script. Try running: sudo %s" %
            (sys.argv[0])))
    sys.exit(1)

# Only import lxc now so we don't need to build-depend on it for help2man
import lxc

for path in (LXC_LIB, LXC_CACHE):
    if not os.path.exists(path):
        print(_("%s doesn't exist." % path))
        sys.exit(1)

# In cleanup mode, wipe the LXC cache and any existing template
if args.cleanup:
    if os.path.exists("%s/%s" % (LXC_LIB, LXC_TEMPLATE)):
        shutil.rmtree("%s/%s" % (LXC_LIB, LXC_TEMPLATE))

    for entry in glob.glob("%s/*" % LXC_CACHE):
        shutil.rmtree(entry)

# Check that the container doesn't exist
if os.path.exists("%s/%s" % (LXC_LIB, LXC_TEMPLATE)):
    print(_("The template already exists."))
    sys.exit(1)

# Create a basic container
template = lxc.Container(LXC_TEMPLATE)
if not template.create("ubuntu"):
    print(_("Failed to create the base system."))
    sys.exit(1)

# Run the configuration script
shutil.copy(LXC_CONFIGURE, "%s/%s/rootfs/configure"
            % (LXC_LIB, LXC_TEMPLATE))

with open(os.devnull, "w") as fd:
    configure = subprocess.Popen(["lxc-unshare",
                                  "-s", "PID|MOUNT|IPC|UTSNAME",
                                  "chroot", "%s/%s/rootfs/" %
                                  (LXC_LIB, LXC_TEMPLATE),
                                  "--", "/configure"],
                                 stdout=fd, stderr=fd)

if configure.wait() != 0:
    print(_("Failed to configure the template."))
    sys.exit(1)

os.remove("%s/%s/rootfs/configure" % (LXC_LIB, LXC_TEMPLATE))