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:
parent
d69f93e5b2
commit
c7962e7c6d
@ -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:
|
||||
|
Loading…
Reference in New Issue
Block a user