1
0
mirror of https://gitlab.com/fdroid/fdroidserver.git synced 2024-11-04 22:40:12 +01:00

server init: replace ssh subprocess with paramiko

It is easier to handle programming with python rather than subprocess calls
so I replaced the subprocess call to 'ssh' with paramiko.  This also makes
fdroid more portable since it no longer relies on the local system having
ssh installed.
This commit is contained in:
Hans-Christoph Steiner 2014-07-02 20:54:52 -04:00
parent d69f93e5b2
commit c7962e7c6d

View File

@ -20,6 +20,8 @@
import sys
import hashlib
import os
import paramiko
import pwd
import subprocess
from optparse import OptionParser
import logging
@ -255,17 +257,26 @@ def main():
if args[0] == 'init':
if config.get('serverwebroot'):
sshargs = ['ssh']
if options.quiet:
sshargs += ['-q']
ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
sshstr, remotepath = config['serverwebroot'].rstrip('/').split(':')
if sshstr.find('@') >= 0:
username, hostname = sshstr.split('@')
else:
username = pwd.getpwuid(os.getuid())[0] # get effective uid
hostname = sshstr
ssh.connect(hostname, username=username)
sftp = ssh.open_sftp()
if os.path.basename(remotepath) \
not in sftp.listdir(os.path.dirname(remotepath)):
sftp.mkdir(remotepath, mode=0755)
for repo_section in repo_sections:
cmd = sshargs + [host, 'mkdir -p', fdroiddir + '/' + repo_section]
if options.verbose:
# ssh -v produces different output than rsync -v, so this
# simulates rsync -v
logging.info(' '.join(cmd))
if subprocess.call(cmd) != 0:
sys.exit(1)
repo_path = os.path.join(remotepath, repo_section)
if os.path.basename(repo_path) \
not in sftp.listdir(remotepath):
sftp.mkdir(repo_path, mode=0755)
sftp.close()
ssh.close()
elif args[0] == 'update':
for repo_section in repo_sections:
if local_copy_dir is not None: