diff --git a/settings.conf b/settings.conf index a1af122c1..c8d163974 100644 --- a/settings.conf +++ b/settings.conf @@ -29,6 +29,7 @@ install: - dummyprocess - dummypython - partition +- mount #- unsquashfs - locale - keyboard diff --git a/src/modules/mount/main.py b/src/modules/mount/main.py new file mode 100644 index 000000000..09c94cf74 --- /dev/null +++ b/src/modules/mount/main.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python3 +# encoding: utf-8 +# === This file is part of Calamares - === +# +# Copyright 2014, Aurélien Gâteau +# +# Calamares is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Calamares is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Calamares. If not, see . + +import libcalamares +import tempfile +import os +import subprocess +import sys + + +def mount( devicePath, mountPoint, fs ): + if not os.path.exists( mountPoint ): + os.makedirs( mountPoint ) + subprocess.check_call( [ "mount", "-t", fs, devicePath, mountPoint ] ) + + +def mountPartitions( rootMountPoint, partitions ): + lst = [ x for x in partitions if x[ "mountPoint" ] == "/" ] + assert lst, "No root partition found" + root = lst[ 0 ] + + mount( root[ "device" ], rootMountPoint, root[ "fs" ] ) + + for partition in partitions: + # Skip / and partitions which have no mount points + if partition[ "mountPoint" ] in ( "/", "" ): + continue + mount( partition[ "device" ], rootMountPoint + partition[ "mountPoint" ], partition[ "fs" ]) + + +def calamares_main(): + rootMountPoint = tempfile.mkdtemp( prefix="calamares-root-" ) + mountPartitions( rootMountPoint, libcalamares.global_storage.value( "partitions" ) ) + libcalamares.global_storage.insert( "rootMountPoint", rootMountPoint ) + return "all done, mounted at {}".format( rootMountPoint ) + + +def main( args ): + partitions = ( + { + "device": "/dev/sdb1", + "mountPoint": "/", + "fs": "ext4", + }, + { + "device": "/dev/sdb2", + "mountPoint": "/home", + "fs": "ext4", + }, + { + "device": "/dev/sdb3", + "mountPoint": "", + "fs": "linuxswap", + }, + ) + rootMountPoint = "/tmp/mount" + mountPartitions( rootMountPoint, partitions ) + return 0 + + +if __name__ == "__main__": + sys.exit( main( sys.argv ) ) diff --git a/src/modules/mount/module.conf b/src/modules/mount/module.conf new file mode 100644 index 000000000..25f4d2fbe --- /dev/null +++ b/src/modules/mount/module.conf @@ -0,0 +1,9 @@ +# Module metadata file for dummy process jobmodule +# Syntax is YAML 1.2 +--- +type: "job" +name: "mount" +interface: "python" +requires: [] +script: "main.py" #assumed relative to the current directory +configuration: