diff options
author | brent s | 2017-04-14 19:07:42 -0400 |
---|---|---|
committer | brent s | 2017-04-14 19:07:42 -0400 |
commit | 920dba3cbb778978798cac4129180d2cee05101f (patch) | |
tree | 89ba17feb4172ab46d2d9eaea91e4987bed1c8c1 | |
parent | dccca5255f9ec83bef5a52f207c5e023ff5a6212 (diff) | |
download | aur-920dba3cbb778978798cac4129180d2cee05101f.tar.gz |
i think i finally have something that relatively works.
-rw-r--r-- | .SRCINFO | 25 | ||||
-rw-r--r-- | PKGBUILD | 131 | ||||
-rw-r--r-- | dirtree.lst | 36 | ||||
-rw-r--r-- | dirtree.lst.sig | bin | 0 -> 566 bytes | |||
-rw-r--r-- | linktree.lst | 1 | ||||
-rw-r--r-- | linktree.lst.sig | bin | 0 -> 566 bytes | |||
-rwxr-xr-x[-rw-r--r--] | nquakesv-init.py | 102 | ||||
-rw-r--r-- | nquakesv-init.py.sig | bin | 0 -> 566 bytes | |||
-rw-r--r-- | nquakesv.install | 19 | ||||
-rwxr-xr-x | nquakesv.run | 9 | ||||
-rw-r--r-- | nquakesv.run.sig | bin | 543 -> 566 bytes | |||
-rw-r--r-- | nquakesv@.service | 11 | ||||
-rw-r--r-- | nquakesv@.service.sig | bin | 0 -> 566 bytes |
13 files changed, 226 insertions, 108 deletions
@@ -1,18 +1,17 @@ # Generated by mksrcinfo v8 -# Fri Apr 14 13:29:30 UTC 2017 +# Fri Apr 14 23:07:42 UTC 2017 pkgbase = nquakesv pkgdesc = The easiest, quickest, and most popular QuakeWorld server. pkgver = 1.4 - pkgrel = 3 + pkgrel = 2 url = http://nquake.com/ install = nquakesv.install arch = any license = GPL2 license = custom + makedepends = dos2unix depends = unzip - depends = ezquake depends = python - conflicts = nquake noextract = qsw106.zip noextract = sv-bin-x.zip source = http://fnu.nquake.com/sv-gpl.zip @@ -22,6 +21,10 @@ pkgbase = nquakesv source = CC0-1.0::https://creativecommons.org/publicdomain/zero/1.0/legalcode.txt source = nquakesv.run source = README.arch + source = dirtree.lst + source = linktree.lst + source = nquakesv-init.py + source = nquakesv@.service source = sv-gpl.zip.sig source = sv-non-gpl.zip.sig source = CC0-1.0.sig @@ -29,13 +32,25 @@ pkgbase = nquakesv source = sv-configs.zip.sig source = nquakesv.run.sig source = README.arch.sig + source = dirtree.lst.sig + source = linktree.lst.sig + source = nquakesv-init.py.sig + source = nquakesv@.service sha512sums = 6a07601f56aec5d88b3463c09c4482a2d76e5d7efd8ddc24c1b4e9b662152f62070dbb5409c1a801560872c725b5b8b1d41437b7b99c74bdcc1ae88d2be91121 sha512sums = 21e6ef7a58c03e342b501a345fd777472b9d109a95201fa859c99d626845d01cf90d0ce6c42f76f5878795f1bcd549128250b9f8e82fceedb8b1f6534b9a1e32 sha512sums = 32df717a4a8f121358243333c30d8d0e5d43ee04f3ee8175a894199b8932e90ebedc6b687c25207c6191dbf25363307f09f8c1dc767b58e254e015c150217384 sha512sums = 93d6879712f7bdd56e3ab8f018810bb66a2d4d89e7dfcabf53668eaf23dd984959a1fbe4ecaa743e98b9be2b65de5b2746529b195c78b0c1ff0996e32d8fdd1b sha512sums = 1eb4436f8d58766cbe99db97e5e8c0db8a706376afd291c337de1ba7a6b066d3791dc85ad034bdd54ea336bed6e6e8e7a037d8b04b2773c9c7517b9d9921d1fa - sha512sums = e7dac93556d63c994d37f2361a48408c924426b81395cacb3229acb3020df66dce62e5734686fba44cc7581567e28e5345f6d7a5638c0c97b8effdab78756111 + sha512sums = 61fdec91aeee6b773d451b7407bca55fba5cd152654385b208c9a63c4e92c9f3fba2d8ad45b09585134ba5e1e7f6796c4ad706e5e564bbf3617026994cf30822 sha512sums = b083d3884c9885ab402e58c95ec3b5288ee06afce2bab83af1610c9d2ee174ce7b77748647499cb82d9a3f4686d936e9a91b5feccae0818addd236907952c3d1 + sha512sums = 2bd1a5f1aaec1332f1812d416568f8cd6d1506166f6863743e5c66c83ad5cc74e2415470c28b9f75cb2e20f04c51b930474bbb8073f2f47cb63765cfb144fda3 + sha512sums = 562b17c114f4bc92116acce9a41dbb3d1031ae4ab5ae844e42a61ad3304ae95c86c299069c34966681af44516b5c58b05133441715f2cf4234697a9b3f58c250 + sha512sums = 21d279b5494d2cd777693eade8dde35c5ba7a6dba395828153d1b390ee768fb3ccb57d4b9c4a1dd5bc47d061a3242d9d659c23f310360c76cff95962baaf9a86 + sha512sums = 157cba05212f59c978a0d08f98fbd2f8b888f43d185db655f4517f70470eb304fcdfcfca26c01a244f3cbd2fd79290461971ca8109ae1ce59129fa6ba89f1347 + sha512sums = SKIP + sha512sums = SKIP + sha512sums = SKIP + sha512sums = SKIP sha512sums = SKIP sha512sums = SKIP sha512sums = SKIP @@ -11,12 +11,14 @@ validpgpkeys=('748231EBCBD808A14F5E85D28C004C2F93481F6B') pkgname=('nquakesv') pkgver=1.4 -pkgrel=3 +pkgrel=2 pkgdesc="The easiest, quickest, and most popular QuakeWorld server." url="http://nquake.com/" license=('GPL2' 'custom') -depends=('unzip' 'ezquake' 'python') -conflicts=('nquake') +#depends=('unzip' 'ezquake' 'python') +depends=('unzip' 'python') +makedepends=('dos2unix') +#conflicts=('nquake') arch=('any') install=nquakesv.install _pkgname=nquake @@ -36,13 +38,21 @@ source=("${_nQ_MIRROR}/sv-gpl.zip" "CC0-1.0::https://creativecommons.org/publicdomain/zero/1.0/legalcode.txt" "nquakesv.run" "README.arch" + "dirtree.lst" + "linktree.lst" + "nquakesv-init.py" + "nquakesv@.service" "sv-gpl.zip.sig" "sv-non-gpl.zip.sig" "CC0-1.0.sig" "qsw106.zip.sig" "sv-configs.zip.sig" "nquakesv.run.sig" - "README.arch.sig") + "README.arch.sig" + "dirtree.lst.sig" + "linktree.lst.sig" + "nquakesv-init.py.sig" + "nquakesv@.service") source_x86_64=("${_nQ_MIRROR}/sv-bin-x64.zip" "sv-bin-x64.zip.sig") @@ -60,13 +70,21 @@ fi noextract=('qsw106.zip' "sv-bin-x${BITNESS}.zip") -sha512sums=('6a07601f56aec5d88b3463c09c4482a2d76e5d7efd8ddc24c1b4e9b662152f62070dbb5409c1a801560872c725b5b8b1d41437b7b99c74bdcc1ae88d2be91121' - '21e6ef7a58c03e342b501a345fd777472b9d109a95201fa859c99d626845d01cf90d0ce6c42f76f5878795f1bcd549128250b9f8e82fceedb8b1f6534b9a1e32' - '32df717a4a8f121358243333c30d8d0e5d43ee04f3ee8175a894199b8932e90ebedc6b687c25207c6191dbf25363307f09f8c1dc767b58e254e015c150217384' - '93d6879712f7bdd56e3ab8f018810bb66a2d4d89e7dfcabf53668eaf23dd984959a1fbe4ecaa743e98b9be2b65de5b2746529b195c78b0c1ff0996e32d8fdd1b' - '1eb4436f8d58766cbe99db97e5e8c0db8a706376afd291c337de1ba7a6b066d3791dc85ad034bdd54ea336bed6e6e8e7a037d8b04b2773c9c7517b9d9921d1fa' - 'e7dac93556d63c994d37f2361a48408c924426b81395cacb3229acb3020df66dce62e5734686fba44cc7581567e28e5345f6d7a5638c0c97b8effdab78756111' - 'b083d3884c9885ab402e58c95ec3b5288ee06afce2bab83af1610c9d2ee174ce7b77748647499cb82d9a3f4686d936e9a91b5feccae0818addd236907952c3d1' +sha512sums=('6a07601f56aec5d88b3463c09c4482a2d76e5d7efd8ddc24c1b4e9b662152f62070dbb5409c1a801560872c725b5b8b1d41437b7b99c74bdcc1ae88d2be91121' # sv-gpl.zip + '21e6ef7a58c03e342b501a345fd777472b9d109a95201fa859c99d626845d01cf90d0ce6c42f76f5878795f1bcd549128250b9f8e82fceedb8b1f6534b9a1e32' # sv-non-gpl.zip + '32df717a4a8f121358243333c30d8d0e5d43ee04f3ee8175a894199b8932e90ebedc6b687c25207c6191dbf25363307f09f8c1dc767b58e254e015c150217384' # qsw106.zip + '93d6879712f7bdd56e3ab8f018810bb66a2d4d89e7dfcabf53668eaf23dd984959a1fbe4ecaa743e98b9be2b65de5b2746529b195c78b0c1ff0996e32d8fdd1b' # sv-configs.zip + '1eb4436f8d58766cbe99db97e5e8c0db8a706376afd291c337de1ba7a6b066d3791dc85ad034bdd54ea336bed6e6e8e7a037d8b04b2773c9c7517b9d9921d1fa' # CC0-1.0 + '61fdec91aeee6b773d451b7407bca55fba5cd152654385b208c9a63c4e92c9f3fba2d8ad45b09585134ba5e1e7f6796c4ad706e5e564bbf3617026994cf30822' # nquakesv.run + 'b083d3884c9885ab402e58c95ec3b5288ee06afce2bab83af1610c9d2ee174ce7b77748647499cb82d9a3f4686d936e9a91b5feccae0818addd236907952c3d1' # README.arch + '2bd1a5f1aaec1332f1812d416568f8cd6d1506166f6863743e5c66c83ad5cc74e2415470c28b9f75cb2e20f04c51b930474bbb8073f2f47cb63765cfb144fda3' # dirtree.lst + '562b17c114f4bc92116acce9a41dbb3d1031ae4ab5ae844e42a61ad3304ae95c86c299069c34966681af44516b5c58b05133441715f2cf4234697a9b3f58c250' # linktree.lst + '21d279b5494d2cd777693eade8dde35c5ba7a6dba395828153d1b390ee768fb3ccb57d4b9c4a1dd5bc47d061a3242d9d659c23f310360c76cff95962baaf9a86' # nquakesv-init.py + '157cba05212f59c978a0d08f98fbd2f8b888f43d185db655f4517f70470eb304fcdfcfca26c01a244f3cbd2fd79290461971ca8109ae1ce59129fa6ba89f1347' # nquakesv@.service + 'SKIP' # onwards are .sig files + 'SKIP' + 'SKIP' + 'SKIP' 'SKIP' 'SKIP' 'SKIP' @@ -75,10 +93,10 @@ sha512sums=('6a07601f56aec5d88b3463c09c4482a2d76e5d7efd8ddc24c1b4e9b662152f62070 'SKIP' 'SKIP') -sha512sums_x86_64=('eab8feab5148ef9c3d3a8c644cbc7b621b9132c73e1b25cd62eb28a47e9e0ffd9500b665b22c015c9aca2db10a316a5669e7d8569ddaec0a9610e9c477dc225c' - 'SKIP') -sha512sums_i686=('c4b32e5f409a603adea54206b0ebbebb1b7907d7a56065e7730ca01931de33258e6f859d3d9805ffaf8dff9bcedea26e8455a016fa36b6d08eaf1540b8bbacad' - 'SKIP') +sha512sums_x86_64=('eab8feab5148ef9c3d3a8c644cbc7b621b9132c73e1b25cd62eb28a47e9e0ffd9500b665b22c015c9aca2db10a316a5669e7d8569ddaec0a9610e9c477dc225c' # sv-bin-x64.zip + 'SKIP') # "".sig +sha512sums_i686=('c4b32e5f409a603adea54206b0ebbebb1b7907d7a56065e7730ca01931de33258e6f859d3d9805ffaf8dff9bcedea26e8455a016fa36b6d08eaf1540b8bbacad' # sv-bin-x86.zip + 'SKIP') # "".sig prepare () { unzip -o -j "qsw106.zip" "ID1/PAK0.PAK" @@ -90,48 +108,57 @@ prepare () { } package () { -### BASE ## - # Most of these files are in gpl.zip - install -d -m 0750 ${pkgdir}/opt/quake/{id1,qw} - install -d -m 0750 ${pkgdir}/usr/share/${pkgname} - install -d -m 0750 ${pkgdir}/usr/share/doc/${pkgname} - install -d -m 0750 ${pkgdir}/usr/share/licenses/${pkgname} +### SELF-PROVIDED ### install -d -m 0755 ${pkgdir}/usr/bin + install -d -m 0755 ${pkgdir}/usr/share/doc/${pkgname} + install -d -m 0755 ${pkgdir}/usr/share/${pkgname} + install -d -m 0755 ${pkgdir}/usr/share/${pkgname}/qtv + install -d -m 0755 ${pkgdir}/usr/share/licenses/${pkgname} + install -d -m 0755 ${pkgdir}/usr/share/${pkgname}/qw/maps + install -D -m 0755 ${srcdir}/${pkgname}.run ${pkgdir}/usr/bin/${pkgname} + install -D -m 0755 ${srcdir}/${pkgname}-init.py ${pkgdir}/usr/bin/${pkgname}-init + install -D -m 0644 ${srcdir}/README.arch ${pkgdir}/usr/share/doc/${pkgname}/README.arch + install -D -m 0644 ${srcdir}/CC0-1.0 ${pkgdir}/usr/share/licenses/${pkgname}/CC0-1.0 + install -D -m 0644 ${srcdir}/dirtree.lst ${pkgdir}/usr/share/${pkgname}/dirtree.lst + install -D -m 0644 ${srcdir}/linktree.lst ${pkgdir}/usr/share/${pkgname}/linktree.lst + +### NQUAKE-PROVIDED ## # Implement the following in ezQuake #chgrp games ${pkgdir}/usr/bin/ezquake #chmod 0750 ${pkgdir}/usr/bin/ezquake # And the Business-End(TM). Do the thing. - install -D -m 0775 ${srcdir}/nquakesv.run ${pkgdir}/usr/bin/${pkgname} install -D -m 0775 ${srcdir}/mvdsv ${pkgdir}/usr/share/${pkgname}/mvdsv install -D -m 0775 ${srcdir}/qwfwd/qwfwd.bin ${pkgdir}/usr/share/${pkgname}/qwfwd install -D -m 0775 ${srcdir}/qtv/qtv.bin ${pkgdir}/usr/share/${pkgname}/quaketv - install -D -m 0644 ${srcdir}/README.arch ${pkgdir}/usr/share/doc/${pkgname}/README.arch - cp -a ${srcdir}/logs ${pkgdir}/usr/share/${pkgname}/. - -## DEMO DATA ## - install -D -m 0644 ${srcdir}/PAK0.PAK ${pkgdir}/opt/quake/id1/pak0.pak.DEMO + install -D -m 0644 ${srcdir}/PAK0.PAK ${pkgdir}/usr/share/${pkgname}/id1/pak0.pak.DEMO install -D -m 0644 ${srcdir}/LICINFO.TXT ${pkgdir}/usr/share/doc/${pkgname}/quake_shareware_license_info.txt install -D -m 0644 ${srcdir}/README.TXT ${pkgdir}/usr/share/doc/${pkgname}/quake_shareware_readme.txt install -D -m 0644 ${srcdir}/SLICNSE.TXT ${pkgdir}/usr/share/licenses/${pkgname}/quake_shareware.txt - -## NON-FREE ## - # Most of these files are in non-gpl.zip - install -d -m 0755 ${pkgdir}/usr/share/${pkgname}/qw/maps cp -a ${srcdir}/qw/maps/* ${pkgdir}/usr/share/${pkgname}/qw/maps/. - install -D -m 0644 ${srcdir}/id1/maps/b_exbox2.bsp ${pkgdir}/usr/share/${pkgname}/id1/maps/b_exbox2.bsp - cp -a ${srcdir}/CC0-1.0 ${pkgdir}/usr/share/licenses/${pkgname}/. # And the Business-End(TM). Do the thing. cp -a ${srcdir}/README ${pkgdir}/usr/share/doc/${pkgname}/readme.txt # nQuake FAQ, credits, etc. - install -d -m 0755 ${pkgdir}/usr/share/${pkgname}/cfgs/ - install -d -m 0755 ${pkgdir}/usr/share/${pkgname}/modes/ - mv ${srcdir}/ktx/configs/* ${pkgdir}/usr/share/${pkgname}/cfgs/. - mv ${srcdir}/ktx/modes/* ${pkgdir}/usr/share/${pkgname}/modes/. - rmdir ${srcdir}/ktx/configs - mv ${srcdir}/ktx/mvdsv.cfg ${pkgdir}/usr/share/${pkgname}/cfgs/mvdsv-server.cfg - mv ${srcdir}/ktx/ktx.cfg ${pkgdir}/usr/share/${pkgname}/cfgs/ktx-server.cfg - mv ${srcdir}/ktx/matchless.cfg ${pkgdir}/usr/share/${pkgname}/cfgs/matchless-server.cfg - find ${pkgdir}/usr/share/${pkgname}/cfgs -type f -exec chmod 0644 '{}' \; + +## KTX ## + # Most of these files are in sv-gpl.zip and sv-non-gpl.zip. some are in sv-bin-x${BITNESS}.zip + cp -a ${srcdir}/ktx ${pkgdir}/usr/share/${pkgname}/. + +## QTV ## + cp -a ${srcdir}/qtv/qtv ${pkgdir}/usr/share/${pkgname}/qtv/. + install -D -m 0644 ${srcdir}/qtv/qtv.cfg ${pkgdir}/usr/share/${pkgname}/qtv/qtv.cfg + +## QWFWD ## + install -D -m 0644 ${srcdir}/qwfwd/qwfwd.cfg ${pkgdir}/usr/share/${pkgname}/qwfwd.d/qwfwd.cfg + +### CLEANUP ### + # TODO: We can remove the makedepends on unix2dos if we use sed for this, but i'd need to do some testing + for i in '*.txt' '*.cfg' 'README'; + do + find ${pkgdir}/ -type f -iname "${i}" -exec unix2dos -q '{}' \; + done + find ${pkgdir}/ -type f -iname "*.sh" -delete + rm ${pkgdir}/usr/share/${pkgname}/ktx/portx.cfg + rm ${pkgdir}/usr/share/${pkgname}/ktx/demos/demoshere ### FORTRESS ## # TODO @@ -151,25 +178,5 @@ package () { # # And the Business-End(TM). Do the thing. # cp -a ${srcdir}/arena ${pkgdir}/opt/quake/. # The entire mod # cp -a ${srcdir}/prox ${pkgdir}/opt/quake/. # QuakeProxy, I think? -## KTX ## - # Most of these files are in sv-gpl.zip and sv-non-gpl.zip. some are in sv-bin-x${BITNESS}.zip - cp -a ${srcdir}/ktx ${pkgdir}/usr/share/${pkgname}/. - # Let's clean up a bit. - for f in portx server pwd ban_ip vip_ip; - do - rm ${pkgdir}/usr/share/${pkgname}/ktx/${f}.cfg - done -## QTV ## - cp -a ${srcdir}/qtv/qtv ${pkgdir}/usr/share/${pkgname}/. - install -D -m 0644 ${srcdir}/qtv/qtv.cfg ${pkgdir}/usr/share/${pkgname}/qtv/qtv.cfg -## QWFWD ## - install -D -m 0644 ${srcdir}/qwfwd/qwfwd.cfg ${pkgdir}/usr/share/${pkgname}/qwfwd.d/qwfwd.cfg - -## FINISHING TOUCHES ## - # Security is worthless without a modicum of usability. We're kind of stepping on other packagers' toes here, but... c'est la vie. - # Remind me to submit a patch to https://aur.archlinux.org/packages/ezquake/ (and incorporate into ezquake-git, which I maintain). - # Scratch that, ezquake uses "users" group. Works for me! - chgrp -R users ${pkgdir}/usr/share/${pkgname}/ - chgrp users ${pkgdir}/usr/share/${pkgname} } diff --git a/dirtree.lst b/dirtree.lst new file mode 100644 index 000000000000..b4484ea29844 --- /dev/null +++ b/dirtree.lst @@ -0,0 +1,36 @@ +addons +id1 +ktx +ktx/configs +ktx/configs/usermodes +ktx/configs/usermodes/10on10 +ktx/configs/usermodes/1on1 +ktx/configs/usermodes/1on1/ra +ktx/configs/usermodes/2on2 +ktx/configs/usermodes/3on3 +ktx/configs/usermodes/4on4 +ktx/configs/usermodes/ca +ktx/configs/usermodes/ctf +ktx/configs/usermodes/ffa +ktx/configs/usermodes/matchless +ktx/demos +ktx/modes +ktx/modes/1on1 +ktx/modes/2on2 +ktx/modes/4on4 +ktx/modes/ffa +ktx/progs +ktx/sound +ktx/sound/misc +ktx/sound/ra +ktx/sound/rune +ktx/sound/weapons +logs +qtv +qtv/qtv +qtv/qtv/levelshots +qw +qwfwd +qw/maps +qw/maps/ctf +run diff --git a/dirtree.lst.sig b/dirtree.lst.sig Binary files differnew file mode 100644 index 000000000000..8f4736611a95 --- /dev/null +++ b/dirtree.lst.sig diff --git a/linktree.lst b/linktree.lst new file mode 100644 index 000000000000..4aa88f43e33a --- /dev/null +++ b/linktree.lst @@ -0,0 +1 @@ +qtv/demos ../ktx/demos diff --git a/linktree.lst.sig b/linktree.lst.sig Binary files differnew file mode 100644 index 000000000000..658c451a3368 --- /dev/null +++ b/linktree.lst.sig diff --git a/nquakesv-init.py b/nquakesv-init.py index 93b60f4405fe..c042f8b93d07 100644..100755 --- a/nquakesv-init.py +++ b/nquakesv-init.py @@ -1,5 +1,10 @@ #!/usr/bin/env python3 +# Shoutout to VVD on QuakeNet:#qw-dev. It's because of him not understanding why user's homedir +# overrides are a good thing, even for server software, that I even had to write this bullshit. +# Seriously. This entire script wouldn't be necessary if mvdsv just supported directory layering like +# ezquake, darkplaces(-ded), zandronum(-ded), etc. all do. C'mon. Get with the times. + import os import pwd import datetime @@ -10,6 +15,7 @@ timestamp = datetime.datetime.now().strftime('%Y.%m.%d_%H%M.%S') user = pwd.getpwuid(os.geteuid()).pw_name homedir = os.environ['HOME'] nquakedir = homedir + '/.nquakesv' +pkgdir = '/usr/share/nquakesv' def getVer(): try: @@ -23,39 +29,89 @@ def getVer(): ver = 'unknown' return(ver) -def makeDir(path, dest = False): - pass +# Probably not actually necessary... +#def symLinker(srcdir, destparent, filext = False): +# for f in os.listdir(srcdir): +# # We only want files +# if not os.path.isfile('{0}/{1}'.format(srcdir, f)): +# continue +# if filext: +# if f.endswith(filext): +# os.symlink('{0}/{1}'.format(srcdir, f), +# '{0}/{1}'.format(destparent, f)) +# else: +# os.symlink('{0}/{1}'.format(srcdir, f), +# '{0}/{1}'.format(destparent, f)) + +def populateTree(): + # First we'll do the id1/ dir. It's easy enough. + os.symlink('{0}/id1/pak0.pak.DEMO'.format(pkgdir), '{0}/id1/pak0.pak'.format(nquakedir)) + # Sometimes other games/engines/whatever might be installed that require the retail pak placed here. + if os.path.isfile('/opt/quake/id1/pak1.pak'): + os.symlink('/opt/quake/id1/pak1.pak', '{0}/id1/pak1.pak'.format(nquakedir)) + # Now the bulk of it. + for rootdir in ('ktx', 'qw', 'qtv'): + for root, dirs, files in os.walk('{0}/{1}'.format(pkgdir, rootdir)): + destpath = root.replace(pkgdir, nquakedir) + for f in files: + os.symlink('{0}/{1}'.format(root, f), + '{0}/{1}'.format(destpath, f)) -def buildRootdir(ver = False): +def buildRootTree(ver = False): + # We dont need these dirs. + # Matches "greedily"- that is, "addons" will match e.g. addons/somedir/someotherdir + # So be as explicit as possible. + direxcludes = ['addons', 'run'] + # And these should be links to /usr/share/nquakesv/<name> + # These, unlike the above, are *inherently* explicit- the path must be exact. + dirlinks = [] if ver == False: ver = getVer() # Overwriting is bad, mmk? if os.path.isdir(nquakedir): - os.move(nquakedir, '{0}.bak_{1}'.format(nquakedir, timestamp)) + os.rename(nquakedir, '{0}.bak_{1}'.format(nquakedir, timestamp)) os.makedirs(nquakedir, exist_ok = True) - # Generated from a vanilla from-"source" nquakesv install - # and a "tree -d -J -a --noreport" run inside the directory. - # We only fetch the "contents" key as the first level is '.' - with open('/usr/share/nquakesv/dirtree.json', 'r') as raw: - dirtree = json.loads(raw.read())[0]['contents'] with open(nquakedir + '/VERSION', 'w') as f: f.write('Generated on nquakesv package version {0}\n'.format(ver)) - # We dont need these dirs. - direxcludes = ['addons', 'run'] - dirlinks = ['id1'] - # Walk the paths and build the tree. - for pathspec in dirtree: - if pathspec['name'] in direxcludes: - continue - if pathspec['name'] in dirlinks: - src = '/usr/share/nquakesv/ - dest = - os.symlink() - if pathspec['type'] == 'link': - + # Generated from a vanilla from-"source" nquakesv install + # and generated by running the following inside the directory: + # find ./ -type d -printf "%P\n" | sed -e '/^$/d' | sort + with open('{0}/dirtree.lst'.format(pkgdir), 'r') as raw: + dirtree = raw.read().splitlines() + # Generated from a vanilla from-"source" nquakesv install + # and generated by running the following inside the directory: + # for l in $(find ./ -type l); do echo -n "${l} " | sed -re "s@^\./@@g"; readlink ${l}; done + with open('{0}/linktree.lst'.format(pkgdir), 'r') as raw: + linktree = raw.read().splitlines() + # Walk the paths and build the tree. + for d in dirtree: + makeme = True + for e in direxcludes: + if d.startswith(e): + makeme = False + break + if makeme == True and d in dirlinks: + os.symlink('{0}/{1}'.format(pkgdir, d), + '{0}/{1}'.format(nquakedir, d)) + elif makeme == True: + os.makedirs('{0}/{1}'.format(nquakedir, d), exist_ok = True) + for l in linktree: + src = l.split()[1] + dest = l.split()[0] + makeme = True + for e in direxcludes: + if dest.startswith(e): + makeme = False + break + if makeme == True: + destpath = '{0}/{1}'.format(nquakedir, dest) + if not os.path.isdir(os.path.dirname(destpath)): + os.makedirs(os.path.dirname(destpath)) + os.symlink(src, destpath) def main(): - pass + buildRootTree() + populateTree() if __name__ == '__main__': main() diff --git a/nquakesv-init.py.sig b/nquakesv-init.py.sig Binary files differnew file mode 100644 index 000000000000..041c22b2397f --- /dev/null +++ b/nquakesv-init.py.sig diff --git a/nquakesv.install b/nquakesv.install index 80866a2099fc..3e1cf48a00bb 100644 --- a/nquakesv.install +++ b/nquakesv.install @@ -4,20 +4,7 @@ post_install() { echo 'It is *strongly* encouraged to add users to the "users" group (usermod -aG users <username>) if they will be running nQuake. Trust me. If you hit a bug and you are using a user not in the users group, you are testing bad and you should feel bad.' echo - echo "nQuake Server has been installed. Please copy the retail pak1.pak files (as exactly that filename) to /opt/quake/id1/ - and do (as root): chmod 0775 /opt/quake/id1/*.pak ; chgrp users /opt/quake/id1/*.pak'" - echo "Also remember to run nquakesv-init as the user(s) that will be running nquakesv." - - if [ ! -f "/opt/quake/id1/pak0.pak" ]; - then - cp /opt/quake/id1/pak0.pak.DEMO /opt/quake/id1/pak0.pak - fi + echo "Remember to run nquakesv-init as the user(s) that will be running nquakesv." + echo "Once that has been done, copy the retail pak1.pak files (as exactly that filename) to <user homedir>/.nquakesv/id1/." + echo "(If it exists at /opt/quake/id1/pak1.pak, it will be symlinked for you automatically.)" } - -post_upgrade() { - - # fix group ownerships... - find /opt/quake -group games -exec chgrp users '{}' \; - -} - diff --git a/nquakesv.run b/nquakesv.run index 2ae44bf14ebf..8b58c3a0b03f 100755 --- a/nquakesv.run +++ b/nquakesv.run @@ -1,5 +1,10 @@ #!/bin/bash -cd /opt/quake -./mvdsv +cfg_use_home 1 +cfg_load "$@" +if [ ! -d ~/.nquakesv ]; +then + /usr/bin/nquakesv-init +fi + +cd ~/.nquakesv +/usr/share/nquakesv/mvdsv "$@" exit $? diff --git a/nquakesv.run.sig b/nquakesv.run.sig Binary files differindex ffc2b21fd090..a9373fd3a62f 100644 --- a/nquakesv.run.sig +++ b/nquakesv.run.sig diff --git a/nquakesv@.service b/nquakesv@.service new file mode 100644 index 000000000000..cbf422ea9fbc --- /dev/null +++ b/nquakesv@.service @@ -0,0 +1,11 @@ +[Unit] +Description=nQuake Dedicated Server +After=network.target + +[Service] +Type=simple +User=%I +ExecStart=/usr/bin/nquakesv + +[Install] +WantedBy=multi-user.target diff --git a/nquakesv@.service.sig b/nquakesv@.service.sig Binary files differnew file mode 100644 index 000000000000..53780d8d1aaf --- /dev/null +++ b/nquakesv@.service.sig |