/
debian.rb
80 lines (59 loc) · 2.3 KB
/
debian.rb
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
# Copyright (c) 2017 github/ooxi
# https://github.com/ooxi/mini-cross
#
# This software is provided 'as-is', without any express or implied warranty. In
# no event will the authors be held liable for any damages arising from the use
# of this software.
#
# Permission is granted to anyone to use this software for any purpose,
# including commercial applications, and to alter it and redistribute it freely,
# subject to the following restrictions:
#
# 1. The origin of this software must not be misrepresented; you must not claim
# that you wrote the original software. If you use this software in a product,
# an acknowledgment in the product documentation would be appreciated but is
# not required.
#
# 2. Altered source versions must be plainly marked as such, and must not be
# misrepresented as being the original software.
#
# 3. This notice may not be removed or altered from any source distribution.
require 'shellwords'
require_relative 'base'
require_relative 'docker-run-arguments'
require_relative 'dockerfile'
# Specialization for Debian like systems
class DebianDockerContext < BaseDockerContext
# @param id {@link Id}-like object
# @param from Docker image to be used as base (e.g. `debian:stretch')
def initialize(id, from)
uid = id.user_id
gid = id.group_id
user = id.user_name
group = id.group_name
df = Dockerfile.new
df.from from
# Ensure unicode support
df.run_sh 'apt-get -y update && apt-get -y install locales'
df.run_sh 'echo \'en_US.UTF-8 UTF-8\' >> /etc/locale.gen'
df.run_sh 'locale-gen'
df.env 'LANG', 'en_US.UTF-8'
df.env 'LANGUAGE', 'en_US:en'
df.env 'LC_ALL', 'en_US.UTF-8'
# Provide password-less sudo
df.run_sh 'apt-get -y update && apt-get -y install sudo'
df.run_sh "echo 'ALL ALL = (ALL) NOPASSWD: ALL' >> /etc/sudoers"
# Add user in context similar to host user
df.run_exec ['groupadd', '--gid', gid, group]
df.run_exec ['useradd', '--gid', gid, '--uid', uid, '--home', "/home/#{user}", user]
df.run_exec ['mkdir', '-p', "/home/#{user}"]
df.run_exec ['chown', '-R', "#{uid}:#{gid}", "/home/#{user}"]
df.user user
dr = DockerRunArguments.new
dr.user id
super(df, dr)
end
def install(packages)
dockerfile.run_sh "sudo apt-get -y update && sudo apt-get -y install #{Shellwords.join packages}"
end
end