func UndoSetupSnap(s snap.PlaceInfo, meter progress.Meter) { // SetupSnap did it not made far enough if !osutil.FileExists(s.MountDir()) { return } if err := RemoveSnapFiles(s, meter); err != nil { logger.Noticef("cannot remove snap files: %s", err) } mountDir := s.MountDir() snapPath := s.MountFile() // remove install dir and the snap blob itself for _, path := range []string{ mountDir, snapPath, } { if err := os.RemoveAll(path); err != nil { logger.Noticef("cannot remove snap package at %v: %s", mountDir, err) } } // FIXME: do we need to undo installGadgetHardwareUdevRules via // cleanupGadgetHardwareUdevRules ? it will go away // and can only be used during install right now }
// removeKernelAssets removes the unpacked kernel/initrd for the given // kernel snap func removeKernelAssets(s snap.PlaceInfo, inter interacter) error { bootloader, err := findBootloader() if err != nil { return fmt.Errorf("no not remove kernel assets: %s", err) } // remove the kernel blob blobName := filepath.Base(s.MountFile()) dstDir := filepath.Join(bootloader.Dir(), blobName) if err := os.RemoveAll(dstDir); err != nil { return err } return nil }
// RemoveSnapFiles removes the snap files from the disk func RemoveSnapFiles(s snap.PlaceInfo, meter progress.Meter) error { mountDir := s.MountDir() // XXX: nicer way to do this typ := snap.TypeApp content, err := ioutil.ReadFile(filepath.Join(mountDir, "meta", "/snap.yaml")) if err == nil { info, err := snap.InfoFromSnapYaml(content) if err == nil { typ = info.Type } } snapPath := s.MountFile() // this also ensures that the mount unit stops if err := removeSquashfsMount(mountDir, meter); err != nil { return err } if err := os.RemoveAll(mountDir); err != nil { return err } // best effort(?) os.Remove(filepath.Dir(mountDir)) // remove the snap if err := os.RemoveAll(snapPath); err != nil { return err } // remove the kernel assets (if any) if typ == snap.TypeKernel { if err := removeKernelAssets(s, meter); err != nil { logger.Noticef("removing kernel assets failed with %s", err) } } return nil }