backend

package
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 12, 2022 License: Apache-2.0 Imports: 24 Imported by: 0

Documentation

Overview

Package backend implements the low-level primitives to manage the snaps and their installation on disk.

  • Copyright (C) 2020 Canonical Ltd *
  • This program is free software: you can redistribute it and/or modify
  • it under the terms of the GNU General Public License version 3 as
  • published by the Free Software Foundation. *
  • This program is distributed in the hope that it will be useful,
  • but WITHOUT ANY WARRANTY; without even the implied warranty of
  • MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  • GNU General Public License for more details. *
  • You should have received a copy of the GNU General Public License
  • along with this program. If not, see <http://www.gnu.org/licenses/>. *

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GenerateSnapdWrappers

func GenerateSnapdWrappers(s *snap.Info, opts *GenerateSnapdWrappersOptions) error

func MockAllUsers

func MockAllUsers(f func(options *dirs.SnapDirOptions) ([]*user.User, error)) func()

MockAllUsers allows tests to mock snap.AllUsers. Panics if called outside of tests.

func OpenSnapFile

func OpenSnapFile(snapPath string, sideInfo *snap.SideInfo) (*snap.Info, snap.Container, error)

OpenSnapFile opens a snap blob returning both a snap.Info completed with sideInfo (if not nil) and a corresponding snap.Container. Assumes the file was verified beforehand or the user asked for --dangerous.

func WithSnapLock

func WithSnapLock(info *snap.Info, action func() error) error

WithSnapLock executes given action with the snap lock held.

The lock is also used by snap-confine during pre-snap mount namespace initialization. Holding it allows to ensure mutual exclusion during the process of preparing a new snap app or hook processes. It does not prevent existing application or hook processes from forking.

Note that this is not a method of the Backend type, so that it can be invoked from doInstall, which does not have access to a backend object.

Types

type Alias

type Alias struct {
	Name   string `json:"name"`
	Target string `json:"target"`
}

Alias represents a command alias with a name and its application target.

type Backend

type Backend struct {
	// contains filtered or unexported fields
}

Backend exposes all the low-level primitives to manage snaps and their installation on disk.

func NewForPreseedMode

func NewForPreseedMode() Backend

func (Backend) Candidate

func (b Backend) Candidate(*snap.SideInfo)

Candidate is a test hook.

func (Backend) ClearTrashedData

func (b Backend) ClearTrashedData(oldSnap *snap.Info)

ClearTrashedData removes the trash. It returns no errors on the assumption that it is called very late in the game.

func (Backend) CopySnapData

func (b Backend) CopySnapData(newSnap, oldSnap *snap.Info, opts *dirs.SnapDirOptions, meter progress.Meter) error

CopySnapData makes a copy of oldSnap data for newSnap in its data directories.

func (Backend) CurrentInfo

func (b Backend) CurrentInfo(*snap.Info)

CurrentInfo is a test hook.

func (Backend) DiscardSnapNamespace

func (b Backend) DiscardSnapNamespace(snapName string) error

Discard the mount namespace of a given snap.

func (Backend) HideSnapData

func (b Backend) HideSnapData(snapName string) error

HideSnapData moves the snap's data directory in ~/snap into the corresponding ~/.snap/data directory, for each user using the snap.

func (Backend) InitExposedSnapHome

func (b Backend) InitExposedSnapHome(snapName string, rev snap.Revision, opts *dirs.SnapDirOptions) (undoInfo *UndoInfo, err error)

InitExposedSnapHome creates and initializes ~/Snap/<snapName> based on the specified revision. If no error occurred, returns a non-nil undoInfo so that the operation can be undone. If an error occurred, an attempt is made to undo so no undoInfo is returned.

func (Backend) InitXDGDirs

func (b Backend) InitXDGDirs(info *snap.Info) error

InitXDGDirs renames .local/share, .config and .cache directories to their post core22 migration locations. Directories that don't exist are created. Must be invoked after the revisioned data has been migrated.

func (Backend) LinkSnap

func (b Backend) LinkSnap(info *snap.Info, dev snap.Device, linkCtx LinkContext, tm timings.Measurer) (rebootRequired boot.RebootInfo, e error)

LinkSnap makes the snap available by generating wrappers and setting the current symlinks.

func (Backend) QueryDisabledServices

func (b Backend) QueryDisabledServices(info *snap.Info, pb progress.Meter) ([]string, error)

func (Backend) RemoveSnapAliases

func (b Backend) RemoveSnapAliases(snapName string) error

RemoveSnapAliases removes all the aliases targeting the given snap.

func (Backend) RemoveSnapCommonData

func (b Backend) RemoveSnapCommonData(snap *snap.Info, opts *dirs.SnapDirOptions) error

RemoveSnapCommonData removes the data common between versions of the given snap.

func (Backend) RemoveSnapData

func (b Backend) RemoveSnapData(snap *snap.Info, opts *dirs.SnapDirOptions) error

RemoveSnapData removes the data for the given version of the given snap.

func (Backend) RemoveSnapDataDir

func (b Backend) RemoveSnapDataDir(info *snap.Info, hasOtherInstances bool) error

RemoveSnapDataDir removes base snap data directory

func (Backend) RemoveSnapDir

func (b Backend) RemoveSnapDir(s snap.PlaceInfo, hasOtherInstances bool) error

func (Backend) RemoveSnapFiles

func (b Backend) RemoveSnapFiles(s snap.PlaceInfo, typ snap.Type, installRecord *InstallRecord, dev snap.Device, meter progress.Meter) error

RemoveSnapFiles removes the snap files from the disk after unmounting the snap.

func (Backend) RemoveSnapInhibitLock

func (b Backend) RemoveSnapInhibitLock(instanceName string) error

RemoveSnapInhibitLock removes the file controlling inhibition of "snap run".

func (Backend) RemoveSnapMountUnits

func (b Backend) RemoveSnapMountUnits(s snap.PlaceInfo, meter progress.Meter) error

func (Backend) RemoveSnapSaveData

func (b Backend) RemoveSnapSaveData(snapInfo *snap.Info, dev snap.Device) error

RemoveSnapSaveData removes the common save data in the case of a complete removal of a snap.

func (b Backend) RunInhibitSnapForUnlink(info *snap.Info, hint runinhibit.Hint, decision func() error) (lock *osutil.FileLock, err error)

func (Backend) ServicesEnableState

func (b Backend) ServicesEnableState(info *snap.Info, meter progress.Meter) (map[string]bool, error)

ServicesEnableState returns the current enabled/disabled states of a snap's services, primarily for committing before snap removal/disable/revert.

func (Backend) SetupSnap

func (b Backend) SetupSnap(snapFilePath, instanceName string, sideInfo *snap.SideInfo, dev snap.Device, setupOpts *SetupSnapOptions, meter progress.Meter) (snapType snap.Type, installRecord *InstallRecord, err error)

SetupSnap does prepare and mount the snap for further processing.

func (Backend) SetupSnapSaveData

func (b Backend) SetupSnapSaveData(info *snap.Info, dev snap.Device, meter progress.Meter) error

func (Backend) StartServices

func (b Backend) StartServices(apps []*snap.AppInfo, disabledSvcs []string, meter progress.Meter, tm timings.Measurer) error

func (Backend) StopServices

func (b Backend) StopServices(apps []*snap.AppInfo, reason snap.ServiceStopReason, meter progress.Meter, tm timings.Measurer) error

func (Backend) UndoCopySnapData

func (b Backend) UndoCopySnapData(newInfo, oldInfo *snap.Info, opts *dirs.SnapDirOptions, _ progress.Meter) error

UndoCopySnapData removes the copy that may have been done for newInfo snap of oldInfo snap data and also the data directories that may have been created for newInfo snap.

func (Backend) UndoHideSnapData

func (b Backend) UndoHideSnapData(snapName string) error

UndoHideSnapData moves the snap's data directory in ~/.snap/data into ~/snap, for each user using the snap.

func (Backend) UndoInitExposedSnapHome

func (b Backend) UndoInitExposedSnapHome(snapName string, undoInfo *UndoInfo) error

UndoInitExposedSnapHome undoes the ~/Snap initialization according to the undoInfo.

func (Backend) UndoSetupSnap

func (b Backend) UndoSetupSnap(s snap.PlaceInfo, typ snap.Type, installRecord *InstallRecord, dev snap.Device, meter progress.Meter) error

UndoSetupSnap undoes the work of SetupSnap using RemoveSnapFiles.

func (Backend) UndoSetupSnapSaveData

func (b Backend) UndoSetupSnapSaveData(newInfo, oldInfo *snap.Info, dev snap.Device, meter progress.Meter) error

func (Backend) UnlinkSnap

func (b Backend) UnlinkSnap(info *snap.Info, linkCtx LinkContext, meter progress.Meter) error

UnlinkSnap makes the snap unavailable to the system removing wrappers and symlinks. The firstInstallUndo is true when undoing the first installation of the snap.

func (Backend) UpdateAliases

func (b Backend) UpdateAliases(add []*Alias, remove []*Alias) error

UpdateAliases adds and removes the given aliases.

type GenerateSnapdWrappersOptions

type GenerateSnapdWrappersOptions struct {
	Preseeding bool
}

GenerateSnapdWrappersOptions carries options for GenerateSnapdWrappers.

type InstallRecord

type InstallRecord struct {
	// TargetSnapExisted indicates that the target .snap file under /var/lib/snapd/snap already existed when the
	// backend attempted SetupSnap() through squashfs Install() and should be kept.
	TargetSnapExisted bool `json:"target-snap-existed,omitempty"`
}

InstallRecord keeps a record of what installation effectively did as hints about what needs to be undone in case of failure.

type LinkContext

type LinkContext struct {
	// FirstInstall indicates whether this is the first time given snap is
	// installed
	FirstInstall bool

	// IsUndo is set when we are installing the previous snap while
	// performing a revert of the latest one that was installed
	IsUndo bool

	// ServiceOptions is used to configure services.
	ServiceOptions *wrappers.SnapServiceOptions

	// RunInhibitHint is used only in Unlink snap, and can be used to
	// establish run inhibition lock for refresh operations.
	RunInhibitHint runinhibit.Hint

	// RequireMountedSnapdSnap indicates that the apps and services
	// generated when linking need to use tooling from the snapd snap mount.
	RequireMountedSnapdSnap bool
}

LinkContext carries additional information about the current or the previous state of the snap

type SetupSnapOptions

type SetupSnapOptions struct {
	SkipKernelExtraction bool
}

type UndoInfo

type UndoInfo struct {
	// Created contains the directories created in the operation.
	Created []string `json:"created,omitempty"`
}

UndoInfo contains information about what an operation did so that it can be undone.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL