Sha256: 300b3ef9920f1bb8a2d171c0486ac3ea151e7a3800cdf4ead18e08cec0547d66

Contents?: true

Size: 1.97 KB

Versions: 1

Compression:

Stored size: 1.97 KB

Contents

# frozen_string_literal: true

module Getch
  module FileSystem
    module Zfs
      module Encrypt
        class Deps < Device
          def make
            unstable_zfs
            install_deps
            zfs_mountpoint
            hostid
            config_dracut
            zed_update_path
          end

          private

          def unstable_zfs
            conf = "#{MOUNTPOINT}/etc/portage/package.accept_keywords/zfs"
            data = [
              'sys-fs/zfs-kmod',
              'sys-fs/zfs'
            ]
            File.write(conf, data.join("\n"), mode: 'w')
          end

          def install_deps
            Getch::Emerge.new('sys-kernel/gentoo-kernel').pkg!
            Getch::Emerge.new('sys-fs/zfs').pkg!
          end

          # See: https://wiki.archlinux.org/index.php/ZFS#Using_zfs-mount-generator
          def zfs_mountpoint
            Helpers.mkdir("#{MOUNTPOINT}/etc/zfs/zfs-list.cache")
            Helpers.touch("#{MOUNTPOINT}/etc/zfs/zfs-list.cache/#{@boot_pool_name}") if @dev_boot
            Helpers.touch("#{MOUNTPOINT}/etc/zfs/zfs-list.cache/#{@pool_name}")
            exec('ln -fs /usr/libexec/zfs/zed.d/history_event-zfs-list-cacher.sh /etc/zfs/zed.d/')
            exec('systemctl start zfs-zed.service')
            exec('systemctl enable zfs-zed.service')
            exec('systemctl enable zfs.target')
          end

          def zed_update_path
            Dir.glob("#{MOUNTPOINT}/etc/zfs/zfs-list.cache/*").each do |f|
              unless system('sed', '-Ei', "s|#{MOUNTPOINT}/?|/|", f)
                raise 'System exec sed'
              end
            end
          end

          def hostid
            exec 'zgenhostid $(hostid)'
          end

          def config_dracut
            conf = "#{MOUNTPOINT}/etc/dracut.conf.d/zfs.conf"
            content = 'hostonly="yes"'
            Helpers.echo conf, content
          end

          def exec(cmd)
            Getch::Chroot.new(cmd).run!
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
getch-0.1.9 lib/getch/filesystem/zfs/encrypt/deps.rb