// RemoveSnapFiles removes the snap files from the disk after unmounting the snap. func (b Backend) RemoveSnapFiles(s snap.PlaceInfo, typ snap.Type, meter progress.Meter) error { mountDir := s.MountDir() // this also ensures that the mount unit stops if err := removeMountUnit(mountDir, meter); err != nil { return err } if err := os.RemoveAll(mountDir); err != nil { return err } // try to remove parent dir, failure is ok, means some other // revisions are still in there os.Remove(filepath.Dir(mountDir)) // snapPath may either be a file or a (broken) symlink to a dir snapPath := s.MountFile() if _, err := os.Lstat(snapPath); err == nil { // remove the kernel assets (if any) if typ == snap.TypeKernel { if err := boot.RemoveKernelAssets(s); err != nil { return err } } // remove the snap if err := os.RemoveAll(snapPath); err != nil { return err } } return nil }
// RemoveKernelAssets removes the unpacked kernel/initrd for the given // kernel snap. func RemoveKernelAssets(s snap.PlaceInfo) error { bootloader, err := partition.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 }