Skip to content

Instantly share code, notes, and snippets.

@tcalmant
Created March 17, 2017 09:40
Show Gist options
  • Save tcalmant/7899f9ad646c04758013a4c2fdad60ab to your computer and use it in GitHub Desktop.
Save tcalmant/7899f9ad646c04758013a4c2fdad60ab to your computer and use it in GitHub Desktop.
Locks apt* tools until closed.
#!/usr/bin/env python
# -- Content-Encoding: UTF-8 --
"""
Locks apt until closed
"""
from __future__ import print_function
import time
import signal
import sys
try:
import fcntl
except ImportError:
print("Works only on *nix")
sys.exit(1)
def signal_handler(fd, signum):
"""
Handles signals
"""
print("Got signal", signum, ": unlocking.")
fcntl.lockf(fd, fcntl.LOCK_UN)
sys.exit(128)
def main():
"""
Entry point
"""
try:
with open("/var/lib/apt/lists/lock", "w+") as fd:
# Register signal handlers
handler = lambda s, f: signal_handler(fd, s)
signal.signal(signal.SIGSEGV, handler)
signal.signal(signal.SIGTERM, handler)
try:
fcntl.lockf(fd, fcntl.LOCK_EX)
print("Locked...")
while True:
time.sleep(1)
except KeyboardInterrupt:
print("Got Ctrl+C")
finally:
fcntl.lockf(fd, fcntl.LOCK_UN)
print("Unlocked.")
except IOError as ex:
print("Error locking file:", ex)
return 1
if __name__ == '__main__':
sys.exit(main() or 0)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment