@@ -27,12 +27,16 @@ use quire::{
27
27
28
28
#[ cfg( feature="containers" ) ]
29
29
use crate :: {
30
+ builder:: commands:: alpine,
31
+ builder:: commands:: ubuntu,
30
32
builder:: commands:: tarcmd:: TarCmd ,
33
+ builder:: distrib:: DistroBox ,
31
34
capsule:: packages as capsule,
32
35
container:: util:: clean_dir,
33
36
file_util:: { Dir , Lock } ,
34
37
} ;
35
38
use crate :: build_step:: { BuildStep , Config , Digest , Guard , StepError , VersionError } ;
39
+ use crate :: builder:: distrib:: parse_release_file;
36
40
37
41
const DEFAULT_REGISTRY_HOST : & str = "registry-1.docker.io" ;
38
42
const DEFAULT_IMAGE_NAMESPACE : & str = "library" ;
@@ -148,7 +152,8 @@ impl BuildStep for DockerImage {
148
152
. entry_handler ( whiteout_entry_handler)
149
153
. unpack ( ) ?;
150
154
}
151
- Ok ( ( ) )
155
+
156
+ detect_os_release ( guard)
152
157
}
153
158
154
159
fn is_dependent_on ( & self ) -> Option < & str > {
@@ -316,4 +321,48 @@ async fn download_blob(
316
321
Err ( e) => return Err ( format ! ( "{}" , e) ) ,
317
322
}
318
323
Ok ( blob_path)
319
- }
324
+ }
325
+
326
+ #[ cfg( feature="containers" ) ]
327
+ fn detect_os_release ( guard : & mut Guard ) -> Result < ( ) , StepError > {
328
+ if let Ok ( release_vars) = parse_release_file ( "/vagga/root/etc/os-release" ) {
329
+ let os_id = release_vars. get ( "ID" ) . map ( String :: as_str) ;
330
+ match os_id {
331
+ Some ( "ubuntu" ) => {
332
+ if let Some ( codename) = release_vars. get ( "UBUNTU_CODENAME" ) {
333
+ let release = ubuntu:: UbuntuRelease {
334
+ codename : Some ( codename. clone ( ) ) ,
335
+ version : None ,
336
+ url : None ,
337
+ arch : String :: from ( "amd64" ) , // TODO(tailhook) detect
338
+ keep_chfn_command : false ,
339
+ eatmydata : true ,
340
+ } ;
341
+ ubuntu:: build:: configure ( guard, release) ?;
342
+ guard. distro . specific ( |u : & mut ubuntu:: Distro | {
343
+ ubuntu:: build:: init_ubuntu_core ( & mut guard. ctx , u)
344
+ . map_err ( |e| StepError :: Compat ( e) )
345
+ } ) ?;
346
+ } else {
347
+ warn ! ( "Missing ubuntu codename" ) ;
348
+ }
349
+ }
350
+ Some ( "alpine" ) => {
351
+ if let Some ( version_id) = release_vars. get ( "VERSION_ID" ) {
352
+ if let Some ( ( alpine_version, _) ) = version_id. rsplit_once ( '.' ) {
353
+ let distro = alpine:: Distro {
354
+ version : format ! ( "v{}" , alpine_version) ,
355
+ mirror : guard. ctx . settings . alpine_mirror ( ) . to_string ( ) ,
356
+ base_setup : false ,
357
+ apk_update : true ,
358
+ } ;
359
+ guard. distro . set ( distro) ?;
360
+ }
361
+ }
362
+ }
363
+ Some ( _) | None => { }
364
+ }
365
+ }
366
+
367
+ Ok ( ( ) )
368
+ }
0 commit comments