Skip to content

Commit

Permalink
faking mtab on target system
Browse files Browse the repository at this point in the history
  • Loading branch information
schubi2 committed Oct 24, 2016
1 parent 60b5f9b commit 34f55d1
Show file tree
Hide file tree
Showing 5 changed files with 170 additions and 0 deletions.
9 changes: 9 additions & 0 deletions src/clients/inst_kickoff.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,12 @@ def main
Yast.import "Arch"
Yast.import "FileUtils"
Yast.import "String"
Yast.import "Mtab"

if !Mode.update
# fake mtab on target system for rpm post-scripts
Mtab.clone_to_target
end

# Feature #301903, bugzilla #244937
if Mode.update
Expand Down Expand Up @@ -159,6 +165,9 @@ def main
end
end

# fake mtab on target system
Mtab.clone_to_target

# F#302660: System installation and upgrade workflow: kernel %post
# calling ins_bootloader write all config files for bootloader
# if (Stage::initial ())
Expand Down
49 changes: 49 additions & 0 deletions src/modules/Mtab.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
#
# Handling of /etc/mtab and /mnt/etc/mtab
#
require "yast"

module Yast
class MtabClass < Module
include Yast::Logger

MTABNAME = "/etc/mtab"

def main
Yast.import "Installation"
end

#
# Reads /etc/mtab from inst-sys, remove all /mnt headings
# and writes this patches mtab into target system.
#
def clone_to_target
log.info("Copying /etc/mtab to the target system...")
mtab = WFM.Read(path(".local.string"), MTABNAME)
# remove non-existing mount points
mtab_lines = mtab.split("\n")
mtab_lines.collect! do |mtab_line|
# Filter out all non-existing entries/directories
columns = mtab_line.split
if File.directory?(columns[1])
# remove heading /mnt from directory entry
columns[1].sub!(/^#{Regexp.escape("/mnt")}/, '')
columns.join(" ")
else
nil
end
end

# join back the lines
mtab = mtab_lines.compact.join("\n")
log.info("Target /etc/mtab file: #{mtab}")
SCR.Write(path(".target.string"),
File.join(Installation.destdir, MTABNAME), mtab)
end

publish :function => :clone_to_target, :type => "boolean ()"
end

Mtab = MtabClass.new
Mtab.main
end
39 changes: 39 additions & 0 deletions test/data/org_mtab
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
tmpfs / tmpfs rw,relatime,size=1016112k,nr_inodes=0 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
/dev/loop0 /parts/mp_0000 squashfs ro,relatime 0 0
/dev/loop1 /parts/mp_0001 squashfs ro,relatime 0 0
devtmpfs /dev devtmpfs rw,relatime,size=462120k,nr_inodes=115530,mode=755 0 0
devpts /dev/pts devpts rw,relatime,mode=600,ptmxmode=000 0 0
rpc_pipefs /var/lib/nfs/rpc_pipefs rpc_pipefs rw,relatime 0 0
/dev/loop2 /mounts/mp_0000 squashfs ro,relatime 0 0
/dev/loop3 /mounts/mp_0001 squashfs ro,relatime 0 0
/dev/loop4 /mounts/mp_0002 squashfs ro,relatime 0 0
/dev/loop5 /mounts/mp_0003 squashfs ro,relatime 0 0
/dev/loop6 /mounts/mp_0004 squashfs ro,relatime 0 0
/dev/vda2 /mnt btrfs rw,relatime,space_cache,subvolid=257,subvol=/@ 0 0
/dev/vda2 /mnt/boot/grub2/i386-pc btrfs rw,relatime,space_cache,subvolid=258,subvol=/@/boot/grub2/i386-pc 0 0
/dev/vda2 /mnt/boot/grub2/x86_64-efi btrfs rw,relatime,space_cache,subvolid=259,subvol=/@/boot/grub2/x86_64-efi 0 0
/dev/vda2 /mnt/home btrfs rw,relatime,space_cache,subvolid=260,subvol=/@/home 0 0
/dev/vda2 /mnt/opt btrfs rw,relatime,space_cache,subvolid=261,subvol=/@/opt 0 0
/dev/vda2 /mnt/srv btrfs rw,relatime,space_cache,subvolid=262,subvol=/@/srv 0 0
/dev/vda2 /mnt/tmp btrfs rw,relatime,space_cache,subvolid=263,subvol=/@/tmp 0 0
/dev/vda2 /mnt/usr/local btrfs rw,relatime,space_cache,subvolid=264,subvol=/@/usr/local 0 0
/dev/vda2 /mnt/var/cache btrfs rw,relatime,space_cache,subvolid=265,subvol=/@/var/cache 0 0
/dev/vda2 /mnt/var/crash btrfs rw,relatime,space_cache,subvolid=266,subvol=/@/var/crash 0 0
/dev/vda2 /mnt/var/lib/libvirt/images btrfs rw,relatime,space_cache,subvolid=267,subvol=/@/var/lib/libvirt/images 0 0
/dev/vda2 /mnt/var/lib/machines btrfs rw,relatime,space_cache,subvolid=268,subvol=/@/var/lib/machines 0 0
/dev/vda2 /mnt/var/lib/mailman btrfs rw,relatime,space_cache,subvolid=269,subvol=/@/var/lib/mailman 0 0
/dev/vda2 /mnt/var/lib/mariadb btrfs rw,relatime,space_cache,subvolid=270,subvol=/@/var/lib/mariadb 0 0
/dev/vda2 /mnt/var/lib/mysql btrfs rw,relatime,space_cache,subvolid=271,subvol=/@/var/lib/mysql 0 0
/dev/vda2 /mnt/var/lib/named btrfs rw,relatime,space_cache,subvolid=272,subvol=/@/var/lib/named 0 0
/dev/vda2 /mnt/var/lib/pgsql btrfs rw,relatime,space_cache,subvolid=273,subvol=/@/var/lib/pgsql 0 0
/dev/vda2 /mnt/var/log btrfs rw,relatime,space_cache,subvolid=274,subvol=/@/var/log 0 0
/dev/vda2 /mnt/var/opt btrfs rw,relatime,space_cache,subvolid=275,subvol=/@/var/opt 0 0
/dev/vda2 /mnt/var/spool btrfs rw,relatime,space_cache,subvolid=276,subvol=/@/var/spool 0 0
/dev/vda2 /mnt/var/tmp btrfs rw,relatime,space_cache,subvolid=277,subvol=/@/var/tmp 0 0
devtmpfs /mnt/dev devtmpfs rw,relatime,size=462120k,nr_inodes=115530,mode=755 0 0
proc /mnt/proc proc rw,relatime 0 0
sysfs /mnt/sys sysfs rw,relatime 0 0
tmpfs /mnt/run tmpfs rw,relatime,size=1016112k,nr_inodes=0 0 0
/dev/sr0 /mnt/var/tmp/AP_0xdxoI8b iso9660 ro,relatime 0 0
39 changes: 39 additions & 0 deletions test/data/patched_mtab
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
tmpfs / tmpfs rw,relatime,size=1016112k,nr_inodes=0 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
/dev/loop0 /parts/mp_0000 squashfs ro,relatime 0 0
/dev/loop1 /parts/mp_0001 squashfs ro,relatime 0 0
devtmpfs /dev devtmpfs rw,relatime,size=462120k,nr_inodes=115530,mode=755 0 0
devpts /dev/pts devpts rw,relatime,mode=600,ptmxmode=000 0 0
rpc_pipefs /var/lib/nfs/rpc_pipefs rpc_pipefs rw,relatime 0 0
/dev/loop2 /mounts/mp_0000 squashfs ro,relatime 0 0
/dev/loop3 /mounts/mp_0001 squashfs ro,relatime 0 0
/dev/loop4 /mounts/mp_0002 squashfs ro,relatime 0 0
/dev/loop5 /mounts/mp_0003 squashfs ro,relatime 0 0
/dev/loop6 /mounts/mp_0004 squashfs ro,relatime 0 0
/dev/vda2 btrfs rw,relatime,space_cache,subvolid=257,subvol=/@ 0 0
/dev/vda2 /boot/grub2/i386-pc btrfs rw,relatime,space_cache,subvolid=258,subvol=/@/boot/grub2/i386-pc 0 0
/dev/vda2 /boot/grub2/x86_64-efi btrfs rw,relatime,space_cache,subvolid=259,subvol=/@/boot/grub2/x86_64-efi 0 0
/dev/vda2 /home btrfs rw,relatime,space_cache,subvolid=260,subvol=/@/home 0 0
/dev/vda2 /opt btrfs rw,relatime,space_cache,subvolid=261,subvol=/@/opt 0 0
/dev/vda2 /srv btrfs rw,relatime,space_cache,subvolid=262,subvol=/@/srv 0 0
/dev/vda2 /tmp btrfs rw,relatime,space_cache,subvolid=263,subvol=/@/tmp 0 0
/dev/vda2 /usr/local btrfs rw,relatime,space_cache,subvolid=264,subvol=/@/usr/local 0 0
/dev/vda2 /var/cache btrfs rw,relatime,space_cache,subvolid=265,subvol=/@/var/cache 0 0
/dev/vda2 /var/crash btrfs rw,relatime,space_cache,subvolid=266,subvol=/@/var/crash 0 0
/dev/vda2 /var/lib/libvirt/images btrfs rw,relatime,space_cache,subvolid=267,subvol=/@/var/lib/libvirt/images 0 0
/dev/vda2 /var/lib/machines btrfs rw,relatime,space_cache,subvolid=268,subvol=/@/var/lib/machines 0 0
/dev/vda2 /var/lib/mailman btrfs rw,relatime,space_cache,subvolid=269,subvol=/@/var/lib/mailman 0 0
/dev/vda2 /var/lib/mariadb btrfs rw,relatime,space_cache,subvolid=270,subvol=/@/var/lib/mariadb 0 0
/dev/vda2 /var/lib/mysql btrfs rw,relatime,space_cache,subvolid=271,subvol=/@/var/lib/mysql 0 0
/dev/vda2 /var/lib/named btrfs rw,relatime,space_cache,subvolid=272,subvol=/@/var/lib/named 0 0
/dev/vda2 /var/lib/pgsql btrfs rw,relatime,space_cache,subvolid=273,subvol=/@/var/lib/pgsql 0 0
/dev/vda2 /var/log btrfs rw,relatime,space_cache,subvolid=274,subvol=/@/var/log 0 0
/dev/vda2 /var/opt btrfs rw,relatime,space_cache,subvolid=275,subvol=/@/var/opt 0 0
/dev/vda2 /var/spool btrfs rw,relatime,space_cache,subvolid=276,subvol=/@/var/spool 0 0
/dev/vda2 /var/tmp btrfs rw,relatime,space_cache,subvolid=277,subvol=/@/var/tmp 0 0
devtmpfs /dev devtmpfs rw,relatime,size=462120k,nr_inodes=115530,mode=755 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
tmpfs /run tmpfs rw,relatime,size=1016112k,nr_inodes=0 0 0
/dev/sr0 /var/tmp/AP_0xdxoI8b iso9660 ro,relatime 0 0
34 changes: 34 additions & 0 deletions test/mtab_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#!/usr/bin/env rspec

require_relative "test_helper"

Yast.import "Mtab"
Yast.import "WFM"
Yast.import "SCR"

DATA_PATH = File.join(File.expand_path(File.dirname(__FILE__)), "data")
MTABNAME = "/etc/mtab"
DESTDIR = "/mnt"

describe Yast::Mtab do
subject(:mtab) { Yast::Mtab }

describe "#clone_to_target" do
let (:org_mtab) { File.open(File.join(DATA_PATH, "org_mtab"), "rb") { |file| file.read } }
let (:patched_mtab) { File.open(File.join(DATA_PATH, "patched_mtab"), "rb") { |file| file.read } }

before do
expect(Yast::WFM).to receive(:Read).
with(Yast::Path.new(".local.string"), MTABNAME).
and_return(org_mtab)
expect(Yast::SCR).to receive(:Write).
with(Yast::Path.new(".target.string"), File.join(DESTDIR, MTABNAME), patched_mtab)
allow(File).to receive(:directory?).and_return(true)
allow(Yast::Installation).to receive(:destdir).and_return(DESTDIR)
end

it "writes /etc/mtab to target system" do
mtab.clone_to_target
end
end
end

0 comments on commit 34f55d1

Please sign in to comment.