slpkg/bin/slpkg

1064 lines
31 KiB
Text
Raw Normal View History

2014-05-23 07:46:51 +02:00
#!/usr/bin/python
# -*- coding: utf-8 -*-
2014-05-28 16:35:41 +02:00
'''Utility to help package management in Slackware.
Slpkg is a terminal tool in order to easy use Slackware packages.
It's a quick and easy way to manage your packages in Slackware to a command.
2014-05-23 07:46:51 +02:00
usage: slpkg [-h] [-v] [-s script [source ...]] [-l all, sbo [all, sbo ...]]
2014-05-28 16:35:41 +02:00
[-t] [-n] [-c] [-b] [-i [...]] [-u [...]] [-a [...]]
[-r [...]] [-f [...]] [-d [...]]
2014-05-23 07:46:51 +02:00
Utility to help package management in Slackware
optional arguments:
-h, --help show this help message and exit
-v, --verbose print version and exit
-s script [source ...]
auto build package
-l all, sbo [all, sbo ...]
list of installed packages
-t tracking dependencies
-n find from SBo repositority
-c check if your package is up to date
2014-05-28 16:35:41 +02:00
-b download, build & install pkg from SBo
2014-05-23 07:46:51 +02:00
-i [ ...] install binary packages
-u [ ...] install-upgrade packages with new
-a [ ...] reinstall the same packages
-r [ ...] remove packages
-f [ ...] find if packages installed
-d [ ...] display the contents of the packages'''
import os
import re
import sys
import shutil
import tarfile
import getpass
import urllib2
import argparse
import subprocess
__author__ = "dslackw"
2014-05-28 16:35:41 +02:00
__version__ = "1.3.6"
2014-05-23 07:46:51 +02:00
__license__ = "GNU General Public License v3 (GPLv3)"
__email__ = "d.zlatanidis@gmail.com"
# grep computer architecture
uname = os.uname()
arch = (uname[4])
# create tmp directory
os.system("mkdir -p /tmp/slpkg/readme/")
# path file record
packages = "/var/log/packages/"
tmp = "/tmp/"
# create dependencies list
dep_results = []
2014-05-28 16:35:41 +02:00
dep_links_results = []
2014-05-23 07:46:51 +02:00
# SlackBuilds repository link
sbo_url = "http://slackbuilds.org/repository/14.1/"
# create repository list
repository = ("academic", "business", "games", "ham",
"misc", "office", "ruby", "accessibility",
"desktop", "gis", "haskell", "multimedia",
"perl", "system", "audio", "development",
"graphics", "libraries", "network", "python")
# print out colors class
class colors:
RED = "\x1b[31m"
GREEN = "\x1b[32m"
YELLOW = "\x1b[33m"
CYAN = "\x1b[36m"
ENDC = "\x1b[0m"
# check if user is root
def s_user(user):
print
if user == "root":
pass
else:
print ("{}Must have {}`root`{} privileges ...{}\n".format(colors.RED,
colors.GREEN, colors.RED, colors.ENDC))
sys.exit()
# remove unused chars
def rmv_unused(name):
rmv = "><"
for i in rmv:
name = name.replace(i, "")
return name
# get filename from links
def get_file(link):
char = "/"
j = 0
results = []
for i in link:
j += 1
results.append(link[-j:])
for file in results:
if file.startswith(char):
file = file
break
file = file.replace("/", "") # remove first char "/" from string
file = file.strip(" ") # remove spaces from string
return file
2014-05-28 16:35:41 +02:00
# get version from files
def get_version(name):
char = "-"
j = 0
results = []
for i in name:
j += 1
results.append(name[-j:])
for file in results:
if file.startswith(char):
file = file
break
file = file.strip(" ") # remove spaces from string
return file
2014-05-23 07:46:51 +02:00
# this fuction return if the package exist
def find_package(find_pkg, directory):
results = []
for file in os.listdir(directory):
if file.startswith(find_pkg):
results.append(file)
return results
# open url and read page
def url_read(name):
f = urllib2.urlopen(name)
read_page = f.read()
return read_page
# read SBo README
def read_readme(sbo_url, name, site):
sbo_url = sbo_url + site
sbo_url = sbo_url.replace("repository", "slackbuilds")
readme = url_read(sbo_url)
file = open("/tmp/slpkg/readme/" + name + "." + site, "w")
file.write(readme)
file.close()
# read SBo .info
def read_info_slackbuild(sbo_url, name, site):
sbo_url = sbo_url + name + site
sbo_url = sbo_url.replace("repository", "slackbuilds")
info = url_read(sbo_url)
file = open("/tmp/slpkg/readme/" + name + site, "w")
file.write(info)
file.close()
# search and found slackbuilds packages links from http://slackbuilds.org
def sbo_search_pkg(name):
i = 0
search_name = re.escape(name) # escapes characters from names like `+`
search_name = ">" + search_name + "<" # add special characters to name >< for clean searching result
toolbar_width = len(repository)
sys.stdout.write("Searching `" + name + "` from slackbuilds.org .%s " % (" " * toolbar_width))
# setup toolbar
sys.stdout.flush()
sys.stdout.write("\b" * (toolbar_width+1))
for i in repository:
# update the bar
sys.stdout.write(".")
sys.stdout.flush()
sbo_url_sub = sbo_url + i + "/"
find_sbo = re.findall(search_name, url_read(sbo_url_sub))
find_sbo = " ".join(find_sbo) # convert list to string
find_sbo = rmv_unused(find_sbo) # remove unused chars > < from find
# find sub-category
if name in find_sbo:
name = sbo_url_sub + name + "/"
return name
# find slackbuild download
def sbo_slackbuild_dwn(sbo_url, name):
search_name = re.escape(name) # escapes characters from names like `+`
search_name = ">" + search_name + ".tar.gz<"
find_sbo = re.findall(search_name, url_read(sbo_url))
find_sbo = " ".join(find_sbo) # convert list to string
find_sbo = rmv_unused(find_sbo) # remove unused chars > < from find
if find_sbo == name + ".tar.gz":
sbo_url = sbo_url.replace(name + "/", name + ".tar.gz")
else:
sbo_url = sbo_url.replace(name + "/", name + ".tar.bz2")
sbo_url = sbo_url.replace("repository", "slackbuilds")
return sbo_url
# find source downloads
def sbo_source_dwn(sbo_url, name):
sbo_url = sbo_url + name + ".info"
sbo_url = sbo_url.replace("repository", "slackbuilds")
read_info = url_read(sbo_url)
# read lines from .info files grep download line and return source link
if arch == "x86_64":
for line in read_info.splitlines():
if line.startswith('DOWNLOAD_x86_64='):
arch_x86_64_len = len(line)
if arch_x86_64_len > 18:
line = line[17:-1]
return line
else:
for line in read_info.splitlines():
if line.startswith('DOWNLOAD='):
line = line[10:-1]
return line
if arch != "x86_64":
for line in read_info.splitlines():
if line.startswith('DOWNLOAD='):
line = line[10:-1]
return line
# find extra source downloads
def sbo_extra_dwn(sbo_url, name):
sbo_url = sbo_url + name + ".info"
sbo_url = sbo_url.replace("repository", "slackbuilds")
read_info = url_read(sbo_url)
results = []
2014-05-28 16:35:41 +02:00
2014-05-23 07:46:51 +02:00
for line in read_info.splitlines():
if line.startswith(' '):
line = line[10:-1]
if line.startswith('http'):
results.append(line)
return results
# search for package requirements
def sbo_requires_pkg(sbo_url, name):
sbo_url = sbo_url + name + ".info"
sbo_url = sbo_url.replace("repository", "slackbuilds")
read_info = url_read(sbo_url)
for line in read_info.splitlines():
if line.startswith('REQUIRES="'):
line = line[10:-1]
return line
# search for package dependencies
def sbo_dependencies_pkg(name):
2014-05-28 16:35:41 +02:00
if name == "%README%": # avoid to search %README% as dependency
pass
else:
find_sbo_url = sbo_search_pkg(name)
if find_sbo_url == None:
print ("\n")
print ("{}The {}'{}'{} not found{}\n".format(colors.RED,
colors.CYAN, name, colors.RED, colors.ENDC))
else:
find_sbo_req = sbo_requires_pkg(find_sbo_url, name)
dependencies = find_sbo_req.split() # convert string to list
if dependencies == []:
pass
else:
dep_results.append(dependencies)
for line in dependencies:
print
sbo_dependencies_pkg(line)
return dep_results
# search for package dependencies
def sbo_dependencies_links_pkg(name):
2014-05-23 07:46:51 +02:00
if name == "%README%": # avoid to search %README% as dependency
pass
else:
2014-05-28 16:35:41 +02:00
2014-05-23 07:46:51 +02:00
find_sbo_url = sbo_search_pkg(name)
2014-05-28 16:35:41 +02:00
2014-05-23 07:46:51 +02:00
if find_sbo_url == None:
2014-05-28 16:35:41 +02:00
print ("\n")
2014-05-23 07:46:51 +02:00
print ("{}The {}'{}'{} not found{}\n".format(colors.RED,
2014-05-28 16:35:41 +02:00
colors.CYAN, name, colors.RED, colors.ENDC))
2014-05-23 07:46:51 +02:00
else:
2014-05-28 16:35:41 +02:00
find_sbo_dwn = sbo_slackbuild_dwn(find_sbo_url, name)
find_source_dwn = sbo_source_dwn(find_sbo_url, name)
find_extra_dwn = sbo_extra_dwn(find_sbo_url, name)
2014-05-23 07:46:51 +02:00
find_sbo_req = sbo_requires_pkg(find_sbo_url, name)
2014-05-28 16:35:41 +02:00
# create flag to know how much extra source there are
if find_extra_dwn != []:
flag = str(len(find_extra_dwn))
dep_links_results.append(flag)
sbo_dwn = find_sbo_dwn.split()
source_dwn = find_source_dwn.split()
dependencies = find_sbo_req.split()
dep_links_results.append(find_extra_dwn)
dep_links_results.append(source_dwn)
dep_links_results.append(sbo_dwn)
2014-05-23 07:46:51 +02:00
if dependencies == []:
pass
2014-05-28 16:35:41 +02:00
2014-05-23 07:46:51 +02:00
else:
2014-05-28 16:35:41 +02:00
dep_links_results.append(dependencies)
for line in dependencies:
print
sbo_dependencies_links_pkg(line)
2014-05-23 07:46:51 +02:00
2014-05-28 16:35:41 +02:00
return dep_links_results
2014-05-23 07:46:51 +02:00
# find from www.slackbuilds.org the version of the package
def sbo_version_pkg(sbo_url, name):
sbo_url = sbo_url + name + ".info"
sbo_url = sbo_url.replace("repository", "slackbuilds")
read_info = url_read(sbo_url)
for line in read_info.splitlines():
if line.startswith('VERSION="'):
line = line[9:-1]
return line
# auto build package from slackbuild script
def build_package(script, source):
slack_script = script
source_tar = source
# remove file type from slackbuild script and store the name
pkg_name = slack_script.replace(".tar.gz", "")
if pkg_name != slack_script:
pass
else:
pkg_name = slack_script.replace(".tar.bz2", "")
path = subprocess.check_output(["pwd"], shell=True).replace("\n", "/")
try:
tar = tarfile.open(slack_script)
tar.extractall()
tar.close()
shutil.copy2(source_tar, pkg_name)
os.chdir(path + pkg_name)
os.system("sh {}{}{}".format(path, pkg_name + "/", pkg_name + ".SlackBuild"))
2014-05-28 16:35:41 +02:00
os.chdir(path)
2014-05-23 07:46:51 +02:00
except (OSError, IOError):
print
print ("{}Wrong file name, Please try again...{}\n".format(colors.RED,
colors.ENDC))
# build package with extra source
def build_extra_pkg(script, source, extra):
slack_script = script
source_tar = source
extra_source = extra
# remove file type from slackbuild script and store the name
pkg_name = slack_script.replace(".tar.gz", "")
if pkg_name != slack_script:
pass
else:
pkg_name = slack_script.replace(".tar.bz2", "")
path = subprocess.check_output(["pwd"], shell=True).replace("\n", "/")
try:
tar = tarfile.open(slack_script)
tar.extractall()
tar.close()
shutil.copy2(source_tar, pkg_name)
shutil.copy2(extra_source, pkg_name)
os.chdir(path + pkg_name)
os.system("sh {}{}{}".format(path, pkg_name + "/", pkg_name + ".SlackBuild"))
except (OSError, IOError):
print
print ("{}Wrong file name, Please try again...{}\n".format(colors.RED,
colors.ENDC))
# build package with extra-extra sources
def build_extra2_pkg(script, source, extra, extra2):
slack_script = script
source_tar = source
extra_source = extra
extra2_source = extra2
# remove file type from slackbuild script and store the name
pkg_name = slack_script.replace(".tar.gz", "")
if pkg_name != slack_script:
pass
else:
pkg_name = slack_script.replace(".tar.bz2", "")
path = subprocess.check_output(["pwd"], shell=True).replace("\n", "/")
try:
tar = tarfile.open(slack_script)
tar.extractall()
tar.close()
shutil.copy2(source_tar, pkg_name)
shutil.copy2(extra_source, pkg_name)
shutil.copy2(extra2_source, pkg_name)
os.chdir(path + pkg_name)
os.system("sh {}{}{}".format(path, pkg_name + "/", pkg_name + ".SlackBuild"))
except (OSError, IOError):
print
print ("{}Wrong file name, Please try again...{}\n".format(colors.RED,
colors.ENDC))
# print version
def pkg_version():
print ("Version: {}".format(__version__))
print ("Licence: {}".format(__license__))
print ("Email : {}".format(__email__))
# build packages
def pkg_slackbuild(name):
s_user(getpass.getuser())
if len(name) == 2:
build_package(name[0], name[1])
elif len(name) == 3:
build_extra_pkg(name[0],
name[1], name[2])
elif len(name) == 4:
build_extra2_pkg(name[0], name[1],
name[2], name[3])
elif len(name) > 4:
print
print ("{}Not supported with more than four arguments{}\n".format(colors.RED,
colors.ENDC))
elif len(name) == 1:
print
print ("{}Must enter at least two arguments{}\n".format(colors.RED,
colors.ENDC))
# view list of installed packages
def pkg_list(name):
if "all" in name:
print
os.chdir(packages)
os.system("ls * | more")
print
if "sbo" in name:
print
os.chdir(packages)
os.system("ls * | grep 'SBo' | more")
print
# find all dependencies
def pkg_tracking(name):
find_dependencies = sbo_dependencies_pkg(name)
if find_dependencies == None:
pass
2014-05-24 09:09:34 +02:00
elif find_dependencies == []:
print ("\n")
print ("{}No dependencies\n{}".format(colors.GREEN, colors.ENDC))
2014-05-23 07:46:51 +02:00
else:
print ("\n")
pkg_len = len(name) + 18
print ("+" + "=" * pkg_len)
print ("| {}`{}' {}dependencies :{}".format(colors.CYAN, name,
colors.YELLOW, colors.ENDC))
print ("+" + "=" * pkg_len)
find_dependencies.reverse()
2014-05-28 16:35:41 +02:00
2014-05-24 09:09:34 +02:00
print (" |")
for i in range(len(find_dependencies)):
found = " --", str(len(find_dependencies[i])), " ".join(find_dependencies[i])
print (" |")
2014-05-28 16:35:41 +02:00
print " ".join(found)
2014-05-23 07:46:51 +02:00
print
# find from SBo repositority www.slackbuild.org
def sbo_network(name):
find_sbo_url = sbo_search_pkg(name)
if find_sbo_url == None:
print ("\n")
print ("{}The {}'{}'{} not found{}\n".format(colors.RED,
colors.CYAN, name, colors.RED, colors.ENDC))
else:
# call sbo functions
find_sbo_req = sbo_requires_pkg(find_sbo_url, name)
find_sbo_dwn = sbo_slackbuild_dwn(find_sbo_url, name)
find_source_dwn = sbo_source_dwn(find_sbo_url, name)
find_extra_dwn = sbo_extra_dwn(find_sbo_url, name)
find_extra_dwn = " ".join(find_extra_dwn) # convert list to string
# caclulate the length of the link
sbo_name_len = len(name)
sbo_url_len = (len(find_sbo_url) + sbo_name_len + 21)
print ("\n")
print ("+" + "=" * sbo_url_len)
print ("| {}The {}`{}`{} found in --> {}".format(colors.GREEN,
colors.CYAN, name, colors.GREEN,
colors.ENDC + find_sbo_url))
print ("+" + "=" * sbo_url_len)
print ("| {}Download SlackBuild : {}{}".format(colors.GREEN,
colors.ENDC, find_sbo_dwn))
print ("| {}Source Downloads : {}{}".format(colors.GREEN,
colors.ENDC, find_source_dwn))
print ("| {}Extra Downloads : {}{}".format(colors.GREEN,
colors.ENDC, find_extra_dwn))
print ("| {}Package requirements : {}{}".format(colors.YELLOW,
colors.ENDC, find_sbo_req))
print ("+" + "=" * sbo_url_len)
print (" {}R{}EADME View the README file".format(colors.RED, colors.ENDC))
print (" {}S{}lackBuild View the SlackBuild file".format(colors.RED, colors.ENDC))
print (" {}I{}nfo View the Info file".format(colors.RED, colors.ENDC))
print (" {}D{}ownload Download this package".format(colors.RED, colors.ENDC))
print (" {}B{}uild Download and build this package".format(colors.RED, colors.ENDC))
print
while True:
read = raw_input("_ ")
if read == "D" or read == "d":
print
print ("{}Start -->{}\n".format(colors.GREEN, colors.ENDC))
os.system("wget " + find_sbo_dwn)
os.system("wget " + find_source_dwn)
if find_extra_dwn == "":
pass
else:
os.system("wget " + find_extra_dwn)
print ("{}Use {}`slpkg -s`{} to build this package{}\n".format(colors.YELLOW,
colors.CYAN, colors.YELLOW, colors.ENDC))
break
elif read == "R" or read == "r":
site = "README"
read_readme(find_sbo_url, name, site)
os.system("less /tmp/slpkg/readme/" + name + ".{}".format(site))
elif read == "I" or read == "i":
site = ".info"
read_info_slackbuild(find_sbo_url, name, site)
os.system("less /tmp/slpkg/readme/" + name + "{}".format(site))
elif read == "S" or read == "s":
site = ".SlackBuild"
read_info_slackbuild(find_sbo_url, name, site)
os.system("less /tmp/slpkg/readme/" + name + "{}".format(site))
elif read == "B" or read == "b":
s_user(getpass.getuser())
script = get_file(find_sbo_dwn)
source = get_file(find_source_dwn)
print
print ("{}Start -->{}\n".format(colors.GREEN, colors.ENDC))
os.system("wget " + find_sbo_dwn)
os.system("wget " + find_source_dwn)
if find_extra_dwn == "":
pass
else:
os.system("wget " + find_extra_dwn)
find_extra_dwn = find_extra_dwn.split() # convert str to list
if len(find_extra_dwn) == 1:
extra = get_file(find_extra_dwn[0])
build_extra_pkg(script, source, extra)
break
elif len(find_extra_dwn) == 2:
extra = get_file(find_extra_dwn[0])
extra2 = get_file(find_extra_dwn[1])
build_extra2_pkg(script, source, extra, extra2)
break
else:
print
print ("{}Not supported with more than four arguments{}\n".format(colors.RED,
colors.ENDC))
break
build_package(script, source)
break
else:
break
# check if packages from www.slackbuilds.org is up to date
def sbo_check(name):
sbo_file = " ".join(find_package(name, packages))
if sbo_file == "":
print
print (" {}The package {}`{}`{} not found on your system{}\n".format(colors.RED,
colors.CYAN, name, colors.RED, colors.ENDC))
else:
find_sbo_url = sbo_search_pkg(name)
if find_sbo_url == None:
print ("\n")
print ("{}The {}`{}`{} not found{}\n".format(colors.RED,
colors.CYAN, name, colors.RED, colors.ENDC))
else:
find_sbo_version = sbo_version_pkg(find_sbo_url, name)
name_len = len(name)
arch_len = len(arch)
sbo_file = sbo_file[name_len+1:-arch_len-7]
if find_sbo_version > sbo_file:
print ("\n")
print ("{} New version is available !!!{}".format(colors.YELLOW, colors.ENDC))
print ("+" + "=" * 50)
print ("| {} {}".format(name, find_sbo_version))
print ("+" + "=" * 50)
print
else:
print ("\n")
print ("{}Your package is up to date{}\n".format(colors.GREEN, colors.ENDC))
2014-05-28 16:35:41 +02:00
# find package and dependencies download, build and install
def sbo_build(name):
find_dependencies_links = sbo_dependencies_links_pkg(name)
# create one list
if find_dependencies_links != []:
results = []
for i in range(len(find_dependencies_links)):
for j in range(len(find_dependencies_links[i])):
results.append(find_dependencies_links[i][j])
# grep only links from list
dwn_link = []
for link in results:
if link.startswith('http'):
dwn_link.append(link)
dwn_link.reverse() # upside-down list
files = []
for i in range(len(dwn_link)):
files.append(get_file(dwn_link[i])) # get tar archives from link
# get version from source code
version = []
j = 1
for i in range(len(files) / 2):
if files[j].endswith("tar.gz"):
ver = files[j]
ver = ver[:-7] # remove archive type .tar.gz
ver = get_version(ver) # remove file name and take the version
ver = ver.replace("-", "")
version.append(ver)
j += 2
elif files[j].endswith("tar.bz2"):
ver = files[j]
ver = ver[:-8]
ver = get_version(ver)
ver = ver.replace("-", "")
version.append(ver)
j += 2
elif files[j].endswith("zip"):
ver = files[j]
ver = ver[:-4]
ver = get_version(ver)
ver = ver.replace("-", "")
version.append(ver)
j += 2
elif files[j].endswith("tar.xz"):
ver = files[j]
ver = ver[:-7]
ver = get_version(ver)
ver = ver.replace("-", "")
version.append(ver)
j += 2
# get filename from sbo script
filename = []
y = 0
for i in range(len(files) / 2):
if files[y].endswith("tar.gz"):
file = files[y]
file = file[:-7]
filename.append(file)
y += 2
elif files[y].endswith("tar.bz2"):
file = files[y]
file = file[:-8]
filename.append(file)
y += 2
elif files[y].endswith("zip"):
file = files[y]
file = file[:-4]
filename.append(file)
y += 2
elif files[y].endswith("tar.xz"):
file = files[y]
file = file[:-7]
filename.append(file)
y += 2
# link sbo filename with version
filename_version = []
for i in range(len(filename)):
filename_version.append(filename[i] + "-" + version[i])
wget_links = set(dwn_link) # remove duplicate links
# dwonload links
for link in wget_links:
os.system("wget {}".format(link))
# build packages and store slackware files in /tmp directory
if results[0] == "1": # check how many extra sources
for i in range(len(files) / 2):
if len(files) < 4:
script = files[0]
source = files[1]
extra = files[2]
build_extra_pkg(script, source, extra)
install_pkg = (subprocess.check_output(["ls /tmp/{}*.tgz".format(filename_version[i])],shell=True).replace("\n", ""))
os.system("upgradepkg --install-new {}".format(install_pkg))
break
else:
script = files[0]
source = files[1]
build_package(script, source)
install_pkg = (subprocess.check_output(["ls /tmp/{}*.tgz".format(filename_version[i])],shell=True).replace("\n", ""))
os.system("upgradepkg --install-new {}".format(install_pkg))
for j in range(0, 2):
files.pop(0)
elif results[0] == "2": # check how many extra sources
for i in range(len(files) / 2):
if len(files) < 5:
script = files[0]
source = files[1]
extra = files[2]
extra2 = files[3]
build_extra2_pkg(script, source, extra, extra2)
install_pkg = (subprocess.check_output(["ls /tmp/{}*.tgz".format(filename_version[i])],shell=True).replace("\n", ""))
os.system("upgradepkg --install-new {}".format(install_pkg))
break
else:
script = files[0]
source = files[1]
build_package(script, source)
install_pkg = (subprocess.check_output(["ls /tmp/{}*.tgz".format(filename_version[i])],shell=True).replace("\n", ""))
os.system("upgradepkg --install-new {}".format(install_pkg))
for j in range(0, 2):
files.pop(0)
else:
for i in range(len(files) / 2):
script = files[0]
source = files[1]
build_package(script, source)
install_pkg = (subprocess.check_output(["ls /tmp/{}*.tgz".format(filename_version[i])],shell=True).replace("\n", ""))
os.system("upgradepkg --install-new {}".format(install_pkg))
for j in range(0, 2):
files.pop(0)
2014-05-23 07:46:51 +02:00
# install binary package
def pkg_install(name):
s_user(getpass.getuser())
for i in range(len(name)):
os.system("installpkg {}".format(name[i]))
# upgrade package with new
def pkg_upgrade(name):
s_user(getpass.getuser())
for i in range(len(name)):
os.system("upgradepkg --install-new {}".format(name[i]))
# upgrade package with the same
def pkg_reinstall(name):
s_user(getpass.getuser())
for i in range(len(name)):
os.system("upgradepkg --reinstall {}".format(name[i]))
# uninstall package
def pkg_remove(name):
s_user(getpass.getuser())
print ("{}!!! WARNING !!!{}".format(colors.YELLOW, colors.ENDC))
remove_pkg = raw_input("Are you sure to remove this package(s) [y/n] ")
2014-05-24 09:09:34 +02:00
print
2014-05-23 07:46:51 +02:00
if remove_pkg == "y" or remove_pkg == "Y":
for i in range(len(name)):
if find_package(name[i], packages) == []:
print ("{}The package {}`{}`{} not found{}".format(colors.RED,
colors.CYAN, name[i], colors.RED, colors.ENDC))
else:
os.system("removepkg {}".format(name[i]))
2014-05-24 09:09:34 +02:00
if find_package(name[i], packages) == []:
print
print ("{}The package {}`{}`{} removed{}".format(colors.YELLOW,
colors.CYAN, name[i], colors.YELLOW, colors.ENDC))
2014-05-23 07:46:51 +02:00
print
# print find if package installed on your system
def pkg_find(name):
print
for i in range(len(name)):
if find_package(name[i], packages) == []:
print ("{}The package {}`{}`{} not found{}".format(colors.RED,
colors.CYAN, name[i], colors.RED, colors.ENDC))
else:
print (colors.GREEN + "found --> " + colors.ENDC + "\n".join(find_package(name[i], packages)))
print
# print the package contents
def pkg_display(name):
print
for i in range(len(name)):
if find_package(name[i], packages) == []:
print ("{}The package {}`{}`{} not found{}".format(colors.RED,
colors.CYAN, name[i], colors.RED, colors.ENDC))
else:
os.system("cat {}{}".format(packages, "\n".join(find_package(name[i], packages))))
print
# main function
def main():
description = "Utility to help package management in Slackware"
parser = argparse.ArgumentParser(description=description)
2014-05-28 16:35:41 +02:00
2014-05-23 07:46:51 +02:00
parser.add_argument("-v", "--verbose", help="print version and exit",
action="store_true")
2014-05-28 16:35:41 +02:00
2014-05-23 07:46:51 +02:00
parser.add_argument("-s", help="auto build package",
type=str, nargs="+", metavar=('script','source'))
2014-05-28 16:35:41 +02:00
2014-05-23 07:46:51 +02:00
parser.add_argument("-l", help="list of installed packages",
nargs="+", choices="all sbo".split(), metavar=('all, sbo'))
2014-05-28 16:35:41 +02:00
2014-05-23 07:46:51 +02:00
parser.add_argument("-t", help="tracking dependencies",
type=str, metavar=(''))
2014-05-28 16:35:41 +02:00
2014-05-23 07:46:51 +02:00
parser.add_argument("-n", help="find from SBo repositority",
type=str, metavar=(''))
2014-05-28 16:35:41 +02:00
2014-05-23 07:46:51 +02:00
parser.add_argument("-c", help="check if your package is up to date",
type=str, metavar=(''))
2014-05-28 16:35:41 +02:00
parser.add_argument("-b", help="download, build & install pkg from SBo",
type=str, metavar=(''))
2014-05-23 07:46:51 +02:00
parser.add_argument("-i", help="install binary packages",
type=str, nargs="+", metavar=(''))
2014-05-28 16:35:41 +02:00
2014-05-23 07:46:51 +02:00
parser.add_argument("-u", help="install-upgrade packages with new",
type=str, nargs="+", metavar=(''))
2014-05-28 16:35:41 +02:00
2014-05-23 07:46:51 +02:00
parser.add_argument("-a", help="reinstall the same packages",
type=str, nargs="+", metavar=(''))
2014-05-28 16:35:41 +02:00
2014-05-23 07:46:51 +02:00
parser.add_argument("-r", help="remove packages",
type=str, nargs="+", metavar=(''))
2014-05-28 16:35:41 +02:00
2014-05-23 07:46:51 +02:00
parser.add_argument("-f", help="find if packages installed",
type=str, nargs="+", metavar=(''))
2014-05-28 16:35:41 +02:00
2014-05-23 07:46:51 +02:00
parser.add_argument("-d", help="display the contents of the packages",
type=str, nargs="+", metavar=(''))
2014-05-28 16:35:41 +02:00
2014-05-23 07:46:51 +02:00
args = parser.parse_args()
if args.verbose:
pkg_version()
if args.s:
pkg_slackbuild(args.s)
if args.l:
pkg_list(args.l)
if args.t:
pkg_tracking(args.t)
if args.n:
sbo_network(args.n)
if args.c:
sbo_check(args.c)
2014-05-28 16:35:41 +02:00
if args.b:
sbo_build(args.b)
2014-05-23 07:46:51 +02:00
2014-05-28 16:35:41 +02:00
2014-05-23 07:46:51 +02:00
if args.i:
pkg_install(args.i)
if args.u:
pkg_upgrade(args.u)
if args.a:
pkg_reinstall(args.a)
if args.r:
pkg_remove(args.r)
if args.f:
pkg_find(args.f)
if args.d:
pkg_display(args.d)
2014-05-28 16:35:41 +02:00
if not any([args.verbose, args.s, args.t, args.c, args.n, args.b, args.i, args.u, args.a,
2014-05-23 07:46:51 +02:00
args.r, args.l, args.f, args.d]):
os.system("slpkg -h")
if __name__ == "__main__":
main()