aboutsummaryrefslogtreecommitdiff
#pragma once

#include "types.hh"


namespace nix {


/* Open (possibly create) a lock file and return the file descriptor.
   -1 is returned if create is false and the lock could not be opened
   because it doesn't exist.  Any other error throws an exception. */
int openLockFile(const Path & path, bool create);

/* Delete an open lock file. */
void deleteLockFile(const Path & path, int fd);

enum LockType { ltRead, ltWrite, ltNone };

bool lockFile(int fd, LockType lockType, bool wait);


class PathLocks 
{
private:
    typedef std::pair<int, Path> FDPair;
    list<FDPair> fds;
    bool deletePaths;

public:
    PathLocks();
    PathLocks(const PathSet & paths,
        const string & waitMsg = "");
    bool lockPaths(const PathSet & _paths,
        const string & waitMsg = "",
        bool wait = true);
    ~PathLocks();
    void unlock();
    void setDeletion(bool deletePaths);
};


bool pathIsLockedByMe(const Path & path);


}
system entries during early Shepherd initialization. Any file-system with additional Shepherd service requirements (e.g. networking) is not required to provision 'file-systems. * gnu/services/base.scm (file-system-shepherd-service): Splice file-system-requirements into the Shepherd service requirement list. (file-system-shepherd-services): Provision 'file-system only when file system services without additional Shepherd requirements are started. * gnu/system/file-systems.scm (file-system): Add shepherd-requirements field to the file-system record. This field is used for adding additional Shepherd requirements to a file-system Shepherd service. * doc/guix.texi: Add documentation for file-system shepherd-requirements. Change-Id: If0392db03d48e8820aa53df1df482c12ec72e1a5 Signed-off-by: Ludovic Courtès <ludo@gnu.org> 2024-05-13file-systems: Add "virtiofs" to the list of pseudo file system types.Massimo Zaniboni * gnu/system/file-systems.scm (%pseudo-file-system-types): Add "virtiofs" to the list of pseudo file system types. Change-Id: Ib1d99127e65f6543c592faec1c54bd0c5eae3ad7 Signed-off-by: Ludovic Courtès <ludo@gnu.org> 2023-12-10file-systems: Add tracefs to %pseudo-file-system-types.Leo Nikkilä * gnu/system/file-systems.scm (%pseudo-file-system-types): Add tracefs. Signed-off-by: Ludovic Courtès <ludo@gnu.org> 2023-10-30gnu: file-systems: Add xenfs to %pseudo-file-system-types.Skyler Ferris * gnu/system/file-systems.scm (%pseudo-file-system-types): Add xenfs. Signed-off-by: Ludovic Courtès <ludo@gnu.org> 2023-09-17gnu: file-systems: Add variable %base-live-file-systems.Nicolas Graves * gnu/system/file-systems.scm (%base-live-file-systems): New variable. * gnu/system/install.scm (installation-os): Use %base-live-file-systems. Signed-off-by: Ludovic Courtès <ludo@gnu.org> 2023-08-08file-systems: Use cgroups v2.Sam Lockart cgroup v2 is the next generation of the control groups API. This patch replaces the cgroup v1 file systems with the unified cgroup v2 file system. cgroup v2 allows for things like containerd/podman to run rootless containers and opens guix system up to running things like Kubernetes. Thanks to Hilton Chain <hako@ultrarare.space> for suggesting the Docker service change. * gnu/system/file-systems.scm (%control-groups): Change to a single "cgroup2" mount point. * gnu/services/docker.scm (docker-shepherd-service): Trim 'requirement' field accordingly. Co-authored-by: Ludovic Courtès <ludo@gnu.org> 2023-03-05file-systems: Remove deprecated 'title' field helper procedures.Bruno Victal * gnu/system/file-systems.scm (<file-system>): Change constructor name to 'file-system'. (report-deprecation, device-expression, process-file-system-declaration, file-system): Remove macros. (file-system-title): Remove procedure. Signed-off-by: Ludovic Courtès <ludo@gnu.org> 2023-02-26file-systems: Validate 'no-diratime flag.Tobias Geerinckx-Rice This follows up on commit c0773455397746b10194bc14c7cef144f4095b65, and adds a comment to avoid this in future. * gnu/system/file-systems.scm (invalid-file-system-flags): Add 'no-diratime to the list of KNOWN-FLAGS. 2022-09-26file-systems: Add cgroup2 to %pseudo-file-system-types.Hilton Chain * gnu/system/file-systems.scm (%pseudo-file-system-types): Add cgroup2. Signed-off-by: Ludovic Courtès <ludo@gnu.org>