@@ -6,24 +6,51 @@ class Builder
6
6
7
7
def initialize ( spec )
8
8
@spec = spec
9
+ @image_name = "pgpm-debian12"
10
+ @container_name = "pgpm-debian12_build-#{ Time . now . to_i } _#{ rand ( 10000 ) } "
9
11
end
10
12
11
13
def build
12
14
puts "build()"
13
- p @spec
14
- #create_container
15
+ prepare
15
16
#generate_deb_src_files
17
+ create_container
16
18
#run_pbuilder
17
19
#copy_build_from_container
18
- #destroy_container
20
+ #cleanup
19
21
end
20
22
21
23
private
22
24
25
+ def prepare
26
+ puts "Preparing build..."
27
+ puts " Creating container dir structure..."
28
+ @pgpm_dir = Dir . mktmpdir
29
+ Dir . mkdir "#{ @pgpm_dir } /source"
30
+ Dir . mkdir "#{ @pgpm_dir } /out"
31
+ puts " Copying #{ @spec . package . source . to_s } to #{ @pgpm_dir } /source/"
32
+ FileUtils . copy_entry @spec . package . source . to_s , "#{ @pgpm_dir } /source/"
33
+ end
34
+
23
35
def create_container
24
- # pull pgpm-enabled debian podman image if doesn't exist locally
25
- # create a new container with that image
26
- # and @spec.package.source mounted into the container
36
+ puts "Creating a podman container..."
37
+ # Check if image exists
38
+ system ( "podman image exists #{ @image_name } " )
39
+ if $?. to_i > 0 # image doesn't exist -- pull image from a remote repository
40
+ puts " Pulling image #{ @image_name } ..."
41
+ # TODO
42
+ else
43
+ puts " Image #{ @image_name } already exists! OK"
44
+ end
45
+
46
+ create_opts = " -v #{ @pgpm_dir } :/root/pgpm"
47
+ create_opts += ":z" if selinux_enabled?
48
+ create_opts += " --privileged"
49
+ create_opts += " --name #{ @container_name } #{ @image_name } "
50
+
51
+ puts " Creating and starting container #{ @container_name } "
52
+ puts " podman run -dti #{ create_opts } "
53
+ system ( "podman run -dti #{ create_opts } " )
27
54
end
28
55
29
56
def generate_deb_src_files
@@ -40,16 +67,18 @@ def run_pbuilder
40
67
def copy_build_from_container
41
68
end
42
69
43
- def copy_into_container ( dest_dir_in_container )
44
- end
45
-
46
- def copy_from_container ( dest_dir_on_host )
70
+ def run_container_command ( cmd )
47
71
end
48
72
49
- def destroy_container
73
+ def cleanup
50
74
end
51
75
52
- def run_container_command ( cmd )
76
+ # Needed because SELinux requires :z suffix for mounted directories to
77
+ # be accessible -- otherwise we get "Permission denied" when cd into a
78
+ # mounted dir inside the container.
79
+ def selinux_enabled?
80
+ # This returns true or false by itself
81
+ system ( "sestatus | grep 'SELinux status' | grep -o 'enabled'" )
53
82
end
54
83
55
84
def safe_package_name
0 commit comments