diff --git a/repos/gems/recipes/pkg/drivers_managed-pc/archives b/repos/gems/recipes/pkg/drivers_managed-pc/archives index 731eb056df..f0a93b0bb5 100644 --- a/repos/gems/recipes/pkg/drivers_managed-pc/archives +++ b/repos/gems/recipes/pkg/drivers_managed-pc/archives @@ -6,8 +6,10 @@ _/src/usb_hid_drv _/src/usb_block_drv _/src/vesa_drv _/src/intel_fb_drv +_/src/intel_gpu_drv _/src/boot_fb_drv _/src/ahci_drv +_/src/nvme_drv _/src/report_rom _/src/event_filter _/src/init diff --git a/repos/gems/recipes/pkg/sculpt-installation/README b/repos/gems/recipes/pkg/sculpt-installation/README deleted file mode 100644 index 2a93f86324..0000000000 --- a/repos/gems/recipes/pkg/sculpt-installation/README +++ /dev/null @@ -1 +0,0 @@ -Default installation for a sculpt-based desktop diff --git a/repos/gems/recipes/pkg/sculpt-linux/README b/repos/gems/recipes/pkg/sculpt-linux/README deleted file mode 100644 index c24630ce2c..0000000000 --- a/repos/gems/recipes/pkg/sculpt-linux/README +++ /dev/null @@ -1 +0,0 @@ -Minimal version of Sculpt executable on Linux diff --git a/repos/gems/recipes/pkg/sculpt-linux/archives b/repos/gems/recipes/pkg/sculpt-linux/archives deleted file mode 100644 index e4847ce2a7..0000000000 --- a/repos/gems/recipes/pkg/sculpt-linux/archives +++ /dev/null @@ -1,2 +0,0 @@ -_/pkg/drivers_interactive-linux -_/pkg/sculpt diff --git a/repos/gems/recipes/pkg/sculpt-linux/hash b/repos/gems/recipes/pkg/sculpt-linux/hash deleted file mode 100644 index e23c8794d2..0000000000 --- a/repos/gems/recipes/pkg/sculpt-linux/hash +++ /dev/null @@ -1 +0,0 @@ -2022-01-03-a c6a760c01679c9213f0ae83b4075a5c73c3f09a9 diff --git a/repos/gems/recipes/pkg/sculpt-pc/README b/repos/gems/recipes/pkg/sculpt-pc/README deleted file mode 100644 index f3e32bc16d..0000000000 --- a/repos/gems/recipes/pkg/sculpt-pc/README +++ /dev/null @@ -1 +0,0 @@ -The x86-PC specific parts needed to run sculpt. diff --git a/repos/gems/recipes/pkg/sculpt-pc/archives b/repos/gems/recipes/pkg/sculpt-pc/archives deleted file mode 100644 index 08e9cfd0a3..0000000000 --- a/repos/gems/recipes/pkg/sculpt-pc/archives +++ /dev/null @@ -1,7 +0,0 @@ -_/pkg/drivers_managed-pc -_/pkg/sculpt -_/pkg/wifi -_/src/ipxe_nic_drv -_/src/nvme_drv -_/src/intel_gpu_drv - diff --git a/repos/gems/recipes/pkg/sculpt-pc/hash b/repos/gems/recipes/pkg/sculpt-pc/hash deleted file mode 100644 index 148dfc66f3..0000000000 --- a/repos/gems/recipes/pkg/sculpt-pc/hash +++ /dev/null @@ -1 +0,0 @@ -2021-12-16 f45375a47663d677e8f13447a1dc38e61ebc1450 diff --git a/repos/gems/recipes/pkg/sculpt_distribution-pc/README b/repos/gems/recipes/pkg/sculpt_distribution-pc/README new file mode 100644 index 0000000000..7f67f5a454 --- /dev/null +++ b/repos/gems/recipes/pkg/sculpt_distribution-pc/README @@ -0,0 +1 @@ +Default Sculpt distribution for PC platforms diff --git a/repos/gems/recipes/pkg/sculpt_distribution-pc/archives b/repos/gems/recipes/pkg/sculpt_distribution-pc/archives new file mode 100644 index 0000000000..9ae1b6f1d8 --- /dev/null +++ b/repos/gems/recipes/pkg/sculpt_distribution-pc/archives @@ -0,0 +1,12 @@ +_/pkg/sculpt +_/pkg/drivers_managed-pc +_/pkg/wifi +_/pkg/ipxe_nic_drv +_/pkg/vbox6 +_/pkg/vbox6-capture +_/pkg/vbox5-nova-sculpt +_/pkg/acpica +_/pkg/system_clock-pc +_/pkg/mesa_gpu-intel +_/pkg/file_vault +_/pkg/bsd_audio_drv diff --git a/repos/gems/recipes/pkg/sculpt-installation/hash b/repos/gems/recipes/pkg/sculpt_distribution-pc/hash similarity index 100% rename from repos/gems/recipes/pkg/sculpt-installation/hash rename to repos/gems/recipes/pkg/sculpt_distribution-pc/hash diff --git a/repos/gems/recipes/pkg/sculpt_distribution/README b/repos/gems/recipes/pkg/sculpt_distribution/README new file mode 100644 index 0000000000..d6cb89110a --- /dev/null +++ b/repos/gems/recipes/pkg/sculpt_distribution/README @@ -0,0 +1 @@ +Hardware-agnostic parts of the default Sculpt OS distribution diff --git a/repos/gems/recipes/pkg/sculpt-installation/archives b/repos/gems/recipes/pkg/sculpt_distribution/archives similarity index 69% rename from repos/gems/recipes/pkg/sculpt-installation/archives rename to repos/gems/recipes/pkg/sculpt_distribution/archives index 419e019776..c70d752092 100644 --- a/repos/gems/recipes/pkg/sculpt-installation/archives +++ b/repos/gems/recipes/pkg/sculpt_distribution/archives @@ -1,6 +1,4 @@ _/pkg/system_shell -_/pkg/wifi -_/pkg/ipxe_nic_drv _/pkg/chroot _/pkg/recall_fs _/pkg/black_hole @@ -8,9 +6,6 @@ _/pkg/nit_focus _/pkg/rom_filter _/pkg/rom_reporter _/pkg/nic_router-nat -_/pkg/vbox6 -_/pkg/vbox6-capture -_/pkg/vbox5-nova-sculpt _/pkg/wm _/pkg/themed_wm _/pkg/themed_decorator @@ -21,13 +16,8 @@ _/pkg/nano3d _/pkg/mesa_gears _/pkg/fonts_fs _/pkg/report_dump -_/pkg/acpica _/pkg/qt5_textedit -_/pkg/system_clock-pc _/pkg/mesa_gpu-cpu -_/pkg/mesa_gpu-intel _/pkg/usb_webcam -_/pkg/file_vault _/pkg/test-capture -_/pkg/bsd_audio_drv _/pkg/mixer diff --git a/repos/gems/recipes/pkg/sculpt_distribution/hash b/repos/gems/recipes/pkg/sculpt_distribution/hash new file mode 100644 index 0000000000..469e60201d --- /dev/null +++ b/repos/gems/recipes/pkg/sculpt_distribution/hash @@ -0,0 +1 @@ +2021-12-16 3d12db23d24f0c953ac013ec9adb9ec60ce3da13 diff --git a/repos/gems/recipes/raw/drivers_managed-pc/content.mk b/repos/gems/recipes/raw/drivers_managed-pc/content.mk index 864b024deb..50da72e44b 100644 --- a/repos/gems/recipes/raw/drivers_managed-pc/content.mk +++ b/repos/gems/recipes/raw/drivers_managed-pc/content.mk @@ -1,14 +1,20 @@ content: drivers.config fb_drv.config event_filter.config en_us.chargen \ special.chargen numlock_remap.config gpu_drv.config -drivers.config numlock_remap.config event_filter.config: - cp $(REP_DIR)/recipes/raw/drivers_managed-pc/$@ $@ +drivers.config: + cp $(REP_DIR)/sculpt/drivers/pc $@ + +numlock_remap.config: + cp $(REP_DIR)/sculpt/numlock_remap/default $@ + +event_filter.config: + cp $(REP_DIR)/sculpt/event_filter/pc $@ fb_drv.config: - cp $(GENODE_DIR)/repos/os/recipes/raw/drivers_interactive-pc/$@ $@ + cp $(REP_DIR)/sculpt/fb_drv/default $@ gpu_drv.config: - cp $(GENODE_DIR)/repos/os/src/drivers/gpu/intel/$@ $@ + cp $(REP_DIR)/sculpt/gpu_drv/intel $@ en_us.chargen special.chargen: cp $(GENODE_DIR)/repos/os/src/server/event_filter/$@ $@ diff --git a/repos/gems/run/sculpt.run b/repos/gems/run/sculpt.run index 3a517fa22a..509789950d 100644 --- a/repos/gems/run/sculpt.run +++ b/repos/gems/run/sculpt.run @@ -1,9 +1,22 @@ +# +# \brief Sculpt OS +# \author Norman Feske +# \date 2017-09-07 +# + +# +# Note: the string must be exactly 5 bytes long. +# +proc sculpt_version { } { return "21.11" } + + proc assert_platform_supported { } { if {[have_board pc]} return if {[have_board imx8q_evk]} return if {[have_board mnt_reform2]} return if {[have_board linux]} return + if {[have_board pinephone]} return puts "Platform is unsupported."; exit 0; @@ -11,14 +24,130 @@ proc assert_platform_supported { } { assert_platform_supported + if {[have_spec nova]} { proc kernel_output { } { return "novga serial logmem" } } + +## +## Utilities for querying the ingredients of Sculpt +## + +## +# Return path to the sculpt definition file that contains the list of +# ingredients +# +proc sculpt_path { } { + + global ::env + + set filename "default-[board].sculpt" + if {[info exists ::env(SCULPT)]} { + set filename "$::env(SCULPT)-[board].sculpt" } + + return [select_from_repositories [file join sculpt $filename]] +} + + +## +# Return list of ingredients of scenario supplied via the 'SCULPT' argument +# +# If 'SCULPT' is not specified, use 'sculpt/default.sculpt'. +# +proc sculpt_ingredients { } { + + global _sculpt_ingredients + + if {![info exists _sculpt_ingredients]} { + set fh [open [sculpt_path] "RDONLY"] + set _sculpt_ingredients [split [read $fh] "\n"] + close $fh + } + + return $_sculpt_ingredients +} + + +proc ingredients_of_type { type } { + + set result {} + set line 1 + foreach i [sculpt_ingredients] { + + # skip comment lines + if {[string match "#*" $i]} { + continue } + + # skip empty lines + if {[string match "" $i]} { + continue } + + regexp {^(.*?):\s*(.*)\s*$} $i dummy tag values + + if {$tag == $type} { + lappend result {*}$values} + + incr line + } + return $result +} + + +proc single_ingredient { type default } { + + set ingredient [ingredients_of_type $type] + + if {[llength $ingredient] == 0} { + return $default } + + if {[llength $ingredient] > 1} { + puts stderr "Error: ambigious selection of '$type' in [sculpt_path]" + exit + } + return $ingredient +} + + +proc ingredient_path { type ingredient } { + return [select_from_repositories [file join sculpt $type $ingredient]] } + +proc initial_config_dir { } { + return [file join [run_dir] initial_config] } + +proc initial_config_file { rel_path } { + return [file join [initial_config_dir] $rel_path] } + + +## +## System-image content imported from depot archives +## + create_boot_directory + +proc prefixed_with_depot_user { paths } { + return [lmap path $paths { file join [depot_user] $path }] } + + import_from_depot [depot_user]/src/[base_src] \ - [depot_user]/pkg/sculpt-[board] + [depot_user]/pkg/sculpt \ + {*}[prefixed_with_depot_user [ingredients_of_type import]] + + +## +## Static init configuration +## + +proc log_route { } { + + global ::env + if {[info exists ::env(LOG)]} { + if {$::env(LOG) == "core"} { + return { } } } + + return { } +} proc nic_drv { } { @@ -26,10 +155,8 @@ proc nic_drv { } { if {[have_board pc]} { return ipxe_nic_drv } if {[have_board imx8q_evk]} { return fec_nic_drv } if {[have_board mnt_reform2]} { return fec_nic_drv } - if {[have_board linux]} { return nic_unavailable } - puts "\n Run script is not supported on this platform. \n"; - exit 0; + return nic_unavailable } @@ -70,43 +197,6 @@ proc log_kernel_start_node { } { } -proc config_fs_gpu_drv { } { - - if {[have_board linux]} return - - return {} -} - - -proc config_fs_system { } { - - return { - - -} -} - - -proc config_fs_numlock_remap { } { - - # the drivers_interactive pkg does not host a numlock_remap_rom component - if {[have_board linux]} return - - return {} -} - - -proc config_fs_event_filter { } { - - # - # Prevent the sculpt manager from generating the event-filter configuration. - # Use the configuration provided by drivers_interactive pkg instead. - # - if {[have_board linux]} { - return {} } -} - - install_config { @@ -178,37 +268,7 @@ install_config { - - - - - - - - - - - - - - - - - - - - - - - - - - - - } [config_fs_gpu_drv] { - } [config_fs_system] { - } [config_fs_numlock_remap] { - + @@ -307,7 +367,7 @@ install_config { - + } [log_route] { @@ -421,26 +481,12 @@ install_config { - - - - - - - - - - - - - - - - - - - + + + + + @@ -483,7 +529,7 @@ install_config { - + } [log_route] { @@ -559,7 +605,7 @@ install_config { - + } [log_route] { @@ -571,47 +617,247 @@ install_config { } -foreach file [glob "[genode_dir]/repos/gems/run/sculpt/*.config"] { - copy_file $file [run_dir]/genode/ } + +## +## Initial content of the config file system +## # -# Override files normally obtained from depot archive with the most current -# version found in the Genode source tree. This way, we don't need to -# rebuild the corresponding depot archives each time we tweak one of the -# files. This is just a hack to accelerate the work flow. +# The directory structure for the initial content is created at the run +# directory, which is imported as 'initial_config.tar' into the config fs. # -copy_file [genode_dir]/repos/gems/recipes/pkg/sculpt/README [run_dir]/genode/ +# directory structure +foreach subdir { launcher depot managed keyboard } { + file mkdir [file join [initial_config_dir] $subdir] } -copy_file [genode_dir]/repos/gems/run/sculpt/vimrc [run_dir]/genode/ - -foreach file { en_us.chargen de_ch.chargen de_de.chargen fr_ch.chargen fr_fr.chargen special.chargen } { - copy_file [genode_dir]/repos/os/src/server/event_filter/$file \ - [run_dir]/genode/$file } - -copy_file [genode_dir]/repos/gems/recipes/raw/depot_download/depot_download.config \ - [run_dir]/genode/depot_download.config - -copy_file [genode_dir]/VERSION [run_dir]/genode/ - -copy_file [genode_dir]/repos/gems/src/app/backdrop/genode_logo.png [run_dir]/genode/ -copy_file [genode_dir]/repos/gems/run/sculpt/drop_shadow.png [run_dir]/genode/ - -if {[have_board pc]} { - copy_file [genode_dir]/repos/gems/recipes/raw/drivers_managed-pc/event_filter.config \ - [run_dir]/genode/event_filter.config - - copy_file [genode_dir]/repos/os/src/drivers/gpu/intel/gpu_drv.config \ - [run_dir]/genode/gpu_drv.config - - copy_file [genode_dir]/repos/gems/run/sculpt/machine.vbox [run_dir]/genode/ - - copy_file [genode_dir]/repos/gems/recipes/raw/drivers_managed-pc/drivers.config \ - [run_dir]/genode/drivers.config - - exec gzip -dc [genode_dir]/repos/gems/run/sculpt/machine.vdi.gz > [run_dir]/genode/machine.vdi +# configs that are managed by the sculpt manager if absent +set optional_configs { + fonts + nic_router + event_filter + wifi + runtime + gpu_drv } +foreach config $optional_configs { + set ingredient [single_ingredient $config ""] + if {$ingredient != ""} { + set from [ingredient_path $config $ingredient] + set to [initial_config_file $config] + copy_file $from $to } } + +# configs that are expected to be always present +set required_configs { + nitpicker + deploy + fb_drv + clipboard + drivers + numlock_remap + global_keys + leitzentrale + usb + system + ram_fs +} + +foreach config $required_configs { + set ingredient [single_ingredient $config "default"] + set from [ingredient_path $config $ingredient] + set to [initial_config_file $config] + copy_file $from $to } + +# selection of depot users (pubkey and download files) and launchers +foreach type { depot launcher } { + foreach ingredient [ingredients_of_type $type] { + set from [ingredient_path $type $ingredient] + set to [file join [initial_config_dir] $type $ingredient] + file copy $from $to } } + +copy_file [genode_dir]/repos/gems/recipes/pkg/sculpt/README [initial_config_file README] +copy_file [genode_dir]/repos/gems/run/sculpt/vimrc [initial_config_file vimrc] + +# keyboard layouts +foreach file { en_us de_ch de_de fr_ch fr_fr special } { + set from [genode_dir]/repos/os/src/server/event_filter/$file.chargen + set to [file join [initial_config_dir] keyboard $file] + copy_file $from $to } + + +# +# Pre-populate the managed/ directory of the config fs to avoid diagnostic +# warnings by components starting up before the sculpt manager has generated +# the directory content for the first time. +# + +proc managed_config_path { name } { + return [file join [initial_config_dir] managed $name] } + +set fd [open [managed_config_path installation] w] +puts $fd "" +close $fd + +set fd [open [managed_config_path depot_query] w] +puts $fd "" +close $fd + +foreach config { fonts wifi runtime event_filter } { + file copy [ingredient_path $config default] [managed_config_path $config] } + +copy_file [file join [initial_config_dir] fb_drv] [managed_config_path fb_drv] + + +# +# VERSION file at the root of the config fs, add newline for 'cat /VERSION' +# + +set fd [open [initial_config_file VERSION] w] +puts $fd "[sculpt_version]" +close $fd + +# supply VERSION as a boot module to the sculpt manager +file copy [initial_config_file VERSION] [run_dir]/genode/VERSION + + +## +# Return list of 'pkg' attribute values found in 'type' nodes in an XML file +# +proc pkg_attribute_values { xml_file node_path } { + + set xpath "$node_path/attribute::pkg" + set values {} + + if {[catch { + foreach attr [exec xmllint --xpath $xpath $xml_file] { + regexp {^pkg="(.*)"$} $attr dummy value + lappend values $value + } + }]} { + # no pkg attribute present in 'xml_file' + } + return $values +} + + +## +# Return list of pkg archives reference by the launchers and deploy config +# +proc referenced_pkg_values { } { + + set values {} + + # scan launchers + foreach launcher [ingredients_of_type launcher] { + set path [file join [initial_config_dir] launcher $launcher] + lappend values {*}[pkg_attribute_values $path launcher] + } + + # scan deploy config + lappend values {*}[pkg_attribute_values [initial_config_file deploy] config/start] + + return [lsort -unique $values] +} + + +# +# Replace pkg values of the form "name" by the form "user/pkg/name" suitable as +# arguments for '_collect_from_depot'. +# +proc pkg_archive_paths { values } { + + set result {} + foreach value $values { + if {[regexp {/} $value dummy]} { + lappend result $value + } else { + lappend result "[depot_user]/pkg/$value" + } + } + return $result +} + + +# +# Trigger the creation / updating of referenced depot content +# +# This step may update pkg versions if '--depot-auto-update' is enabled. +# +_collect_from_depot [pkg_archive_paths [referenced_pkg_values]] + + +# +# Augment deploy config or launcher file with current package versions +# + +proc current_pkg { pkg } { return $pkg/[_current_depot_archive_version pkg $pkg] } + + +# +# Supplement file with versioned pkg archive paths +# +# \path deploy config or launcher to augment +# \node XML node type containing the 'pkg' attribute to modify +# +# Each matching XML node is inspected regarding its 'pkg' attribute. If its +# 'pkg' attribute contains a single identifier (rather than a valid pkg path), +# the attribute value is replaced by a valid pkg path referring to the current +# version of the pkg and the [depot_user]. +# +proc augment_pkg_versions { path node } { + + set fd [open $path r] + set content [read $fd] + close $fd + + # filter 'pkg' attribute + set pattern "(\<$node\[^\>\]+?pkg=\")(\[^/\]+)(\")" + while {[regexp $pattern $content dummy head pkg tail]} { + set pkg_path [depot_user]/pkg/[current_pkg $pkg] + regsub $pattern $content "$head$pkg_path$tail" content + } + + # write back the filtered launcher snippet + set fd [open $path w] + puts $fd $content + close $fd +} + + +# launcher snippets +foreach launcher [ingredients_of_type launcher] { + augment_pkg_versions [file join [initial_config_dir] launcher $launcher] "launcher" } + + +# deploy config +augment_pkg_versions [initial_config_file deploy] "start" + + +# update arch attribute of deploy config +exec sed -i "/config/s/arch=\"\"/arch=\"[depot_spec]\"/" [initial_config_file deploy] + + +## +## Depot content integrated in the Sculpt image +## + +create_tar_from_depot_binaries [run_dir]/genode/depot.tar \ + {*}[pkg_archive_paths [referenced_pkg_values]] + + +# +# Create initial_config.tar to be mounted at the root of the config fs +# + +exec sh -c "tar cf [run_dir]/genode/initial_config.tar -C [initial_config_dir] ." + +file delete -force [initial_config_dir] + + +## +## Auxiliary boot modules +## # # Linux-specific tweaks @@ -627,111 +873,18 @@ if {[have_board linux]} { # Managed dataspaces as used by cached_fs_rom are not supported on Linux. # copy_file [run_dir]/genode/fs_rom [run_dir]/genode/cached_fs_rom - - # - # The drivers_interactive-linux pkg does not offer a numlock.remap ROM as - # referenced by the event-filter config generated by sculpt manager. - # - install_boot_module "numlock.remap" {} } -# -# Define 'VERSION' ROM module -# -# Note: the string must be exactly 5 bytes long. -# -proc sculpt_version { } { - return "21.11" } - -# write file with newline (for producing nice output when using 'cat /VERSION') -install_boot_module VERSION "[sculpt_version]" - - -# -# Depot packages to be included in the default installation -# - -proc current_pkg { pkg } { return $pkg/[_current_depot_archive_version pkg $pkg] } - -set pkgs_to_install { } - -set fd [open [run_dir]/genode/installation w] -puts $fd "" -foreach pkg $pkgs_to_install { - puts $fd " " } -puts $fd "" -close $fd - - -# -# Configuration of deploy runtime -# -# This configuration is not provided as a file at run/sculpt/ because some -# parts need to be filled in at run-script execution time, in particular the -# current versions of the packages to deploy. -# -install_boot_module "manual_deploy.config" { - - - - - - - - - -} - - -# -# Install launcher snippets -# -# The launcher snippets are wrapped into a tar archive to be loaded as boot -# module. This procedure involves the following steps: -# -# The launcher snippets are copied from run/sculpt/launcher/ to -# [run_dir]/genode/launcher. Each launcher is inspected regarding its 'pkg' -# attribute. If its 'pkg' attribute contains a single identifier (rather than -# a valid pkg path), the attribute value is replaced by a valid pkg path -# referring to the current version of the pkg and the [depot_user]. The -# filtered launchers are archived into 'launcher.tar' and removed from the -# [run_dir]. -# - -set launchers [glob -tails -directory [genode_dir]/repos/gems/run/sculpt/launcher/ *] - -foreach file $launchers { - - # skip backup files - if {[regexp {~$} $file dummy]} { continue } - - set fd [open [genode_dir]/repos/gems/run/sculpt/launcher/$file r] - set content [read $fd] - close $fd - - # filter 'pkg' attribute - set pattern {(\]+?pkg=")([^/]+)(")} - if {[regexp $pattern $content dummy head pkg tail]} { - set pkg_path [depot_user]/pkg/[current_pkg $pkg] - regsub $pattern $content "$head$pkg_path$tail" content - } - - # write filtered launcher snippet - file mkdir [run_dir]/genode/launcher - set fd [open [run_dir]/genode/launcher/$file w] - puts $fd $content - close $fd -} - -# wrap launcher snippets into tar archive and remove individual snippets -exec tar cf [run_dir]/genode/launcher.tar -C [run_dir]/genode launcher -exec rm -r [run_dir]/genode/launcher +# support for the Leitzentrale GUI +copy_file [genode_dir]/repos/gems/src/app/backdrop/genode_logo.png [run_dir]/genode/ +copy_file [genode_dir]/repos/gems/run/sculpt/drop_shadow.png [run_dir]/genode/ # # Generate depot index from gems/run/sculpt/index # + set fd [open [genode_dir]/repos/gems/run/sculpt/index r] set pkg_index [read $fd] close $fd @@ -750,28 +903,12 @@ puts $fd $pkg_index close $fd -# -# Assemble 'depot_users.tar' with the keys and download locations of the -# depot user found at genode/depot/. -# -# Add current depot index of [depot_user] as generated above. -# -set depot_selection { genodelabs cnuke alex-ab mstein nfeske cproc chelmuth - jschlatow ssumpf skalk } +## +## Create boot image +## -set depot_users_files {} -foreach user $depot_selection { - lappend depot_users_files [file join depot $user pubkey] \ - [file join depot $user download] } +build [ingredients_of_type build] -exec sh -c "tar cf [run_dir]/genode/depot_users.tar -C [genode_dir]/repos/gems/sculpt \ - [join $depot_users_files]" - - -# -# Create boot image -# - -append boot_modules { } +append boot_modules [build_artifacts] build_boot_image $boot_modules diff --git a/repos/gems/run/sculpt/machine.vbox b/repos/gems/run/sculpt/machine.vbox deleted file mode 100644 index 9e90f44c1b..0000000000 --- a/repos/gems/run/sculpt/machine.vbox +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/gems/run/sculpt/machine.vdi.gz b/repos/gems/run/sculpt/machine.vdi.gz deleted file mode 100644 index ee3af925fb..0000000000 Binary files a/repos/gems/run/sculpt/machine.vdi.gz and /dev/null differ diff --git a/repos/gems/run/sculpt/clipboard.config b/repos/gems/sculpt/clipboard/default similarity index 100% rename from repos/gems/run/sculpt/clipboard.config rename to repos/gems/sculpt/clipboard/default diff --git a/repos/gems/sculpt/default-linux.sculpt b/repos/gems/sculpt/default-linux.sculpt new file mode 100644 index 0000000000..277fe8e23d --- /dev/null +++ b/repos/gems/sculpt/default-linux.sculpt @@ -0,0 +1,10 @@ +# configuration decisions +drivers: linux +deploy: example +ram_fs: depot + +# selection of launcher-menu entries +launcher: sticks_blue_backdrop nano3d system_shell + +# supplemental depot content added to the system image +import: pkg/drivers_interactive-linux diff --git a/repos/gems/sculpt/default-pc.sculpt b/repos/gems/sculpt/default-pc.sculpt new file mode 100644 index 0000000000..06b73d2e8a --- /dev/null +++ b/repos/gems/sculpt/default-pc.sculpt @@ -0,0 +1,14 @@ +# configuration decisions +drivers: pc +system: pc +gpu_drv: intel + +# supplemental depot content added to the system image +import: pkg/drivers_managed-pc pkg/wifi src/ipxe_nic_drv + +# selection of launcher-menu entries +launcher: vm_fs shared_fs usb_devices_rom + +# selection of accepted depot-package providers +depot: genodelabs cnuke alex-ab mstein nfeske cproc chelmuth jschlatow +depot: ssumpf skalk diff --git a/repos/gems/sculpt/deploy/default b/repos/gems/sculpt/deploy/default new file mode 100644 index 0000000000..8d175660c4 --- /dev/null +++ b/repos/gems/sculpt/deploy/default @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/repos/gems/sculpt/deploy/example b/repos/gems/sculpt/deploy/example new file mode 100644 index 0000000000..3097fb806f --- /dev/null +++ b/repos/gems/sculpt/deploy/example @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/repos/gems/sculpt/drivers/linux b/repos/gems/sculpt/drivers/linux new file mode 100644 index 0000000000..c43fb2a742 --- /dev/null +++ b/repos/gems/sculpt/drivers/linux @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/repos/gems/recipes/raw/drivers_managed-pc/drivers.config b/repos/gems/sculpt/drivers/pc similarity index 100% rename from repos/gems/recipes/raw/drivers_managed-pc/drivers.config rename to repos/gems/sculpt/drivers/pc diff --git a/repos/gems/sculpt/event_filter/default b/repos/gems/sculpt/event_filter/default new file mode 100644 index 0000000000..ac904ac270 --- /dev/null +++ b/repos/gems/sculpt/event_filter/default @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/repos/gems/recipes/raw/drivers_managed-pc/event_filter.config b/repos/gems/sculpt/event_filter/pc similarity index 100% rename from repos/gems/recipes/raw/drivers_managed-pc/event_filter.config rename to repos/gems/sculpt/event_filter/pc diff --git a/repos/gems/run/sculpt/fb_drv.config b/repos/gems/sculpt/fb_drv/default similarity index 100% rename from repos/gems/run/sculpt/fb_drv.config rename to repos/gems/sculpt/fb_drv/default diff --git a/repos/gems/run/sculpt/fonts.config b/repos/gems/sculpt/fonts/default similarity index 100% rename from repos/gems/run/sculpt/fonts.config rename to repos/gems/sculpt/fonts/default diff --git a/repos/gems/sculpt/global_keys/default b/repos/gems/sculpt/global_keys/default new file mode 100644 index 0000000000..fda94ae891 --- /dev/null +++ b/repos/gems/sculpt/global_keys/default @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/repos/os/src/drivers/gpu/intel/gpu_drv.config b/repos/gems/sculpt/gpu_drv/intel similarity index 100% rename from repos/os/src/drivers/gpu/intel/gpu_drv.config rename to repos/gems/sculpt/gpu_drv/intel diff --git a/repos/gems/sculpt/launcher/nano3d b/repos/gems/sculpt/launcher/nano3d new file mode 100644 index 0000000000..6f5be9f8a7 --- /dev/null +++ b/repos/gems/sculpt/launcher/nano3d @@ -0,0 +1,6 @@ + + + + + + diff --git a/repos/gems/run/sculpt/launcher/shared_fs b/repos/gems/sculpt/launcher/shared_fs similarity index 100% rename from repos/gems/run/sculpt/launcher/shared_fs rename to repos/gems/sculpt/launcher/shared_fs diff --git a/repos/gems/sculpt/launcher/sticks_blue_backdrop b/repos/gems/sculpt/launcher/sticks_blue_backdrop new file mode 100644 index 0000000000..29045f20bb --- /dev/null +++ b/repos/gems/sculpt/launcher/sticks_blue_backdrop @@ -0,0 +1,6 @@ + + + + + + diff --git a/repos/gems/sculpt/launcher/system_shell b/repos/gems/sculpt/launcher/system_shell new file mode 100644 index 0000000000..3bb2b2dc8a --- /dev/null +++ b/repos/gems/sculpt/launcher/system_shell @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/repos/gems/run/sculpt/launcher/usb_devices_rom b/repos/gems/sculpt/launcher/usb_devices_rom similarity index 100% rename from repos/gems/run/sculpt/launcher/usb_devices_rom rename to repos/gems/sculpt/launcher/usb_devices_rom diff --git a/repos/gems/run/sculpt/launcher/vm_fs b/repos/gems/sculpt/launcher/vm_fs similarity index 100% rename from repos/gems/run/sculpt/launcher/vm_fs rename to repos/gems/sculpt/launcher/vm_fs diff --git a/repos/gems/run/sculpt/leitzentrale.config b/repos/gems/sculpt/leitzentrale/default similarity index 100% rename from repos/gems/run/sculpt/leitzentrale.config rename to repos/gems/sculpt/leitzentrale/default diff --git a/repos/gems/run/sculpt/nitpicker.config b/repos/gems/sculpt/nitpicker/default similarity index 100% rename from repos/gems/run/sculpt/nitpicker.config rename to repos/gems/sculpt/nitpicker/default diff --git a/repos/gems/recipes/raw/drivers_managed-pc/numlock_remap.config b/repos/gems/sculpt/numlock_remap/default similarity index 100% rename from repos/gems/recipes/raw/drivers_managed-pc/numlock_remap.config rename to repos/gems/sculpt/numlock_remap/default diff --git a/repos/gems/sculpt/ram_fs/default b/repos/gems/sculpt/ram_fs/default new file mode 100644 index 0000000000..53d5ba3e58 --- /dev/null +++ b/repos/gems/sculpt/ram_fs/default @@ -0,0 +1,6 @@ + + + + + + diff --git a/repos/gems/sculpt/ram_fs/depot b/repos/gems/sculpt/ram_fs/depot new file mode 100644 index 0000000000..265bb530b2 --- /dev/null +++ b/repos/gems/sculpt/ram_fs/depot @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/repos/gems/run/sculpt/empty_runtime.config b/repos/gems/sculpt/runtime/default similarity index 100% rename from repos/gems/run/sculpt/empty_runtime.config rename to repos/gems/sculpt/runtime/default diff --git a/repos/gems/sculpt/system/default b/repos/gems/sculpt/system/default new file mode 100644 index 0000000000..13c78a2e76 --- /dev/null +++ b/repos/gems/sculpt/system/default @@ -0,0 +1 @@ + diff --git a/repos/gems/sculpt/system/pc b/repos/gems/sculpt/system/pc new file mode 100644 index 0000000000..2d42462719 --- /dev/null +++ b/repos/gems/sculpt/system/pc @@ -0,0 +1,3 @@ + + + diff --git a/repos/gems/run/sculpt/usb.config b/repos/gems/sculpt/usb/default similarity index 100% rename from repos/gems/run/sculpt/usb.config rename to repos/gems/sculpt/usb/default diff --git a/repos/gems/run/sculpt/wifi.config b/repos/gems/sculpt/wifi/default similarity index 100% rename from repos/gems/run/sculpt/wifi.config rename to repos/gems/sculpt/wifi/default diff --git a/repos/gems/src/app/sculpt_manager/graph.cc b/repos/gems/src/app/sculpt_manager/graph.cc index b9337f5314..2e179f5e8b 100644 --- a/repos/gems/src/app/sculpt_manager/graph.cc +++ b/repos/gems/src/app/sculpt_manager/graph.cc @@ -257,6 +257,9 @@ void Graph::generate(Xml_generator &xml) const Start_name const name = component.name; + if (name == "ram_fs") + return; + Runtime_state::Info const info = _runtime_state.info(name); bool const show_details = info.tcb; diff --git a/repos/gems/src/app/sculpt_manager/runtime/inspect_view.cc b/repos/gems/src/app/sculpt_manager/runtime/inspect_view.cc index 71eb8405c7..4593d0efec 100644 --- a/repos/gems/src/app/sculpt_manager/runtime/inspect_view.cc +++ b/repos/gems/src/app/sculpt_manager/runtime/inspect_view.cc @@ -77,9 +77,6 @@ static void gen_vfs_start(Xml_generator &xml, }); }); - gen_named_node(xml, "dir", "share", [&] () { - gen_named_node(xml, "tar", "depot_users.tar"); }); - auto fs_dir = [&] (String<64> const &label) { gen_named_node(xml, "dir", label, [&] () { xml.node("fs", [&] () { xml.attribute("label", label); }); }); }; @@ -271,7 +268,6 @@ void Sculpt::gen_inspect_view(Xml_generator &xml, gen_parent_rom_route(xml, "vim-minimal.tar"); gen_parent_rom_route(xml, "ncurses.lib.so"); gen_parent_rom_route(xml, "posix.lib.so"); - gen_parent_rom_route(xml, "depot_users.tar"); gen_parent_rom_route(xml, "vimrc", "config -> vimrc"); gen_parent_rom_route(xml, "VERSION"); gen_parent_rom_route(xml, "Vera.ttf"); diff --git a/repos/gems/src/app/sculpt_manager/runtime/prepare.cc b/repos/gems/src/app/sculpt_manager/runtime/prepare.cc index 6cd2dc5e06..d8d38b8c97 100644 --- a/repos/gems/src/app/sculpt_manager/runtime/prepare.cc +++ b/repos/gems/src/app/sculpt_manager/runtime/prepare.cc @@ -31,7 +31,7 @@ void Sculpt::gen_prepare_vfs_start(Xml_generator &xml) "export VERSION=`cat /VERSION`\n" "cp -r /rw/config/$VERSION/* /config/\n" "mkdir -p /rw/depot\n" - "cp -r depot/* /rw/depot\n" + "cp -r /config/depot/* /rw/depot\n" "exit\n"; gen_provides<::File_system::Session>(xml); @@ -41,7 +41,6 @@ void Sculpt::gen_prepare_vfs_start(Xml_generator &xml) xml.node("vfs", [&] () { gen_named_node(xml, "tar", "bash-minimal.tar"); gen_named_node(xml, "tar", "coreutils-minimal.tar"); - gen_named_node(xml, "tar", "depot_users.tar"); gen_named_node(xml, "inline", ".bash_profile", [&] () { xml.append(script); }); diff --git a/repos/gems/src/app/sculpt_manager/runtime/ram_fs.cc b/repos/gems/src/app/sculpt_manager/runtime/ram_fs.cc index 3d4228f616..9c2765c6fe 100644 --- a/repos/gems/src/app/sculpt_manager/runtime/ram_fs.cc +++ b/repos/gems/src/app/sculpt_manager/runtime/ram_fs.cc @@ -22,14 +22,6 @@ void Sculpt::gen_ram_fs_start_content(Xml_generator &xml, gen_provides<::File_system::Session>(xml); - xml.node("config", [&] () { - xml.node("vfs", [&] () { xml.node("ram", [&] () { }); }); - xml.node("default-policy", [&] () { - xml.attribute("root", "/"); - xml.attribute("writeable", "yes"); - }); - }); - xml.node("route", [&] () { gen_parent_rom_route(xml, "vfs"); gen_parent_rom_route(xml, "ld.lib.so"); @@ -37,5 +29,7 @@ void Sculpt::gen_ram_fs_start_content(Xml_generator &xml, gen_parent_route (xml); gen_parent_route (xml); gen_parent_route (xml); + gen_parent_rom_route(xml, "config", "config -> ram_fs"); + gen_parent_route (xml); }); }