@@ -28,6 +28,10 @@ var requiredPackages = []string{
28
28
"lxd" ,
29
29
}
30
30
31
+ var xenialPackages = []string {
32
+ "zfsutils-linux" ,
33
+ }
34
+
31
35
type containerInitialiser struct {
32
36
series string
33
37
}
@@ -48,7 +52,16 @@ func (ci *containerInitialiser) Initialise() error {
48
52
return err
49
53
}
50
54
51
- return configureLXDBridge ()
55
+ err = configureLXDBridge ()
56
+ if err != nil {
57
+ return err
58
+ }
59
+
60
+ if ci .series >= "xenial" {
61
+ configureZFS ()
62
+ }
63
+
64
+ return nil
52
65
}
53
66
54
67
// getPackageManager is a helper function which returns the
@@ -63,6 +76,24 @@ func getPackagingConfigurer(series string) (config.PackagingConfigurer, error) {
63
76
return config .NewPackagingConfigurer (series )
64
77
}
65
78
79
+ func configureZFS () {
80
+ /* create a 100 GB pool by default (sparse, so it won't actually fill
81
+ * that immediately)
82
+ */
83
+ output , err := exec .Command (
84
+ "lxd" ,
85
+ "init" ,
86
+ "--auto" ,
87
+ "--storage-backend" , "zfs" ,
88
+ "--storage-pool" , "lxd" ,
89
+ "--storage-create-loop" , "100" ,
90
+ ).CombinedOutput ()
91
+
92
+ if err != nil {
93
+ logger .Warningf ("configuring zfs failed with %s: %s" , err , string (output ))
94
+ }
95
+ }
96
+
66
97
func configureLXDBridge () error {
67
98
f , err := os .OpenFile (lxdBridgeFile , os .O_RDWR , 0777 )
68
99
if err != nil {
@@ -219,5 +250,11 @@ func ensureDependencies(series string) error {
219
250
}
220
251
}
221
252
253
+ if series >= "xenial" {
254
+ for _ , pack := range xenialPackages {
255
+ pacman .Install (fmt .Sprintf ("--no-install-recommends %s" , pack ))
256
+ }
257
+ }
258
+
222
259
return err
223
260
}
0 commit comments