jjb/lava: Update system tests to use Debian bookworm rootfs
[lttng-ci.git] / lava / rootfs / vmdeboostrap / generate-root.py
CommitLineData
11d1fd9c 1#!/usr/bin/python3
888abe0b
JR
2# Copyright (C) 2018 - Jonathan Rajotte-Julien <jonathan.rajotte-julien@efficios.com>
3#
4# This program is free software: you can redistribute it and/or modify
5# it under the terms of the GNU General Public License as published by
6# the Free Software Foundation, either version 3 of the License, or
7# (at your option) any later version.
8#
9# This program is distributed in the hope that it will be useful,
10# but WITHOUT ANY WARRANTY; without even the implied warranty of
11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12# GNU General Public License for more details.
13#
14# You should have received a copy of the GNU General Public License
15# along with this program. If not, see <http://www.gnu.org/licenses/>.
16
888abe0b 17import argparse
888abe0b 18import gzip
1e206006 19import os
888abe0b 20import shutil
1e206006 21import subprocess
7ba728fd 22import sys
1e206006
JR
23
24from datetime import datetime
888abe0b
JR
25
26
27def compress(filename):
7ba728fd
KS
28 command = [
29 'tar', '-c', '-z',
30 '-f', filename + ".tar.gz",
31 '-C', filename,
32 './'
33 ]
34 subprocess.run(command, check=True)
35 shutil.rmtree(filename)
888abe0b
JR
36
37
38packages = [
39 'autoconf',
40 'automake',
41 'bash-completion',
42 'bison',
888abe0b
JR
43 'build-essential',
44 'chrpath',
45 'clang',
46 'cloc',
888abe0b
JR
47 'curl',
48 'elfutils',
49 'flex',
50 'gettext',
51 'git',
52 'htop',
53 'jq',
7ba728fd 54 'libarchive-tools',
888abe0b
JR
55 'libdw-dev',
56 'libelf-dev',
57 'libffi-dev',
58 'libglib2.0-dev',
59 'libmount-dev',
60 'libnuma-dev',
61 'libpfm4-dev',
62 'libpopt-dev',
63 'libtap-harness-archive-perl',
64 'libtool',
65 'libxml2',
66 'libxml2-dev',
3f1bcc40
JR
67 'netcat-traditional',
68 'openssh-server',
888abe0b 69 'psmisc',
7ba728fd 70 'python3-virtualenv',
888abe0b 71 'python3',
888abe0b
JR
72 'python3-dev',
73 'python3-numpy',
74 'python3-pandas',
75 'python3-pip',
3f1bcc40 76 'python3-setuptools',
888abe0b 77 'python3-sphinx',
d0ffdf18 78 'rsync',
888abe0b
JR
79 'stress',
80 'swig',
d0ffdf18
KS
81 'systemd-timesyncd',
82 'systemtap-sdt-dev',
888abe0b
JR
83 'texinfo',
84 'tree',
85 'uuid-dev',
86 'vim',
87 'wget',
88]
89
90
91def main():
92 parser = argparse.ArgumentParser(description='Generate lava lttng rootfs')
93 parser.add_argument("--arch", default='amd64')
d0ffdf18
KS
94 parser.add_argument("--distribution", default='bookworm')
95 parser.add_argument("--mirror", default='https://deb.debian.org/debian')
888abe0b 96 parser.add_argument(
d0ffdf18 97 "--component", default='main')
888abe0b
JR
98 args = parser.parse_args()
99
7ba728fd 100 name = "rootfs_{}_{}_{}".format(args.arch, args.distribution,
888abe0b
JR
101 datetime.now().strftime("%Y-%m-%d"))
102
103 hostname = "linaro-server"
104 user = "linaro/linaro"
105 root_password = "root"
106 print(name)
107 command = [
7ba728fd 108 "debootstrap",
888abe0b 109 "--arch={}".format(args.arch),
7ba728fd 110 "--components={}".format(args.component),
888abe0b 111 "--verbose",
7ba728fd
KS
112 args.distribution, # SUITE
113 name, # TARGET (directory is created)
114 args.mirror, # MIRROR
888abe0b 115 ]
7ba728fd 116 completed_command = subprocess.run(command, check=True)
888abe0b 117
7ba728fd
KS
118 # packages
119 command = [
120 'chroot', name,
121 'apt-get', 'install', '-y', ] + packages
888abe0b
JR
122 completed_command = subprocess.run(command, check=True)
123
7ba728fd
KS
124 # hostname
125 with open(os.path.join(name, 'etc', 'hostname'), 'w', encoding='utf-8') as f:
126 f.write(hostname + "\n")
127
128 # user
129 command = [
130 'chroot', name,
131 'adduser', '--gecos', '', '--disabled-password', 'linaro',
132 ]
133 completed_process = subprocess.run(command, check=True)
134
135 command = [
136 'chroot', name, 'chpasswd',
137 ]
138 process = subprocess.Popen(command, stdin=subprocess.PIPE, text=True)
139 process.communicate(input='linaro:linaro')
140
141 # root password
142 process = subprocess.Popen(command, stdin=subprocess.PIPE, text=True)
143 process.communicate(input="root:root")
144
888abe0b
JR
145 compress(name)
146
147
148if __name__ == "__main__":
7ba728fd
KS
149 if os.getuid() != 0:
150 print("This script should be run as root: this is required by deboostrap", file=sys.stderr)
151 sys.exit(1)
888abe0b 152 main()
This page took 0.044779 seconds and 4 git commands to generate.