UNPKG

@sentry0/qemu-hook-manager

Version:
2 lines (1 loc) 1.07 kB
import{env as a}from"node:process";import{mkdir as m,readdir as p,rm as O}from"node:fs/promises";import{join as i,sep as l}from"node:path";import{copyFile as f,chown as h,chmod as H}from"node:fs/promises";import w from"envsub";import _ from"sanitize-filename";import{dirExists as d,ls as u}from"./general.js";export const QEMU_HOOK_DIR="/etc/libvirt/hooks",HOOKS_ROOT=i(QEMU_HOOK_DIR,"qemu.d",".qhm-passthrough");const v=async()=>{for(const t of await p(a.QHM_HOOKS_DIR,{recursive:!0}))if(t.endsWith(".sh")){const o=t.split(l).slice(-1);await y(i(HOOKS_ROOT,...o))}},k=async t=>{await d(t)||await m(t,{recursive:!0})},y=async t=>{const o=await u(t);if(Array.isArray(o))for(const s of o)s&&s.name.startsWith("qhm_")&&await O(i(s.path,s.name))},D=async(t,o,s,n)=>{const c={envs:[{name:"IOMMU_GROUP_ID",value:t}]},e=n?i(a.QHM_HOOKS_DIR,o,s):i(a.QHM_HOOKS_DIR,"hooks",o,s),r=i(HOOKS_ROOT,o,s.replace("device",_(t)));await f(e,r),await h(r,0,0),await H(r,"755"),await w({templateFile:e,outputFile:r,options:c})};export{v as cleanHooks,D as installHook,k as makeHookDirectories};