ssh-python icon indicating copy to clipboard operation
ssh-python copied to clipboard

Add debian packaging files

Open SCOTT-HAMILTON opened this issue 2 years ago • 0 comments

This PR is a follow up of https://github.com/ParallelSSH/ssh2-python/pull/190 in an attempt to package all the parallel-ssh ecosystem to debian, the end goal being to have a python3-parallel-ssh package. I've already started working on parallel-ssh so it's coming next.

I had to disable two tests tests/test_channel.py:test_write_stdin and tests/test_sftp.py:test_mkdir in order to make it build locally, otherwise I had these errors:

_________________________ ChannelTest.test_write_stdin _________________________

self = <tests.test_channel.ChannelTest testMethod=test_write_stdin>

    def test_write_stdin(self):
        self._auth()
        _in = u'writing to stdin'
        chan = self.session.channel_new()
        chan.open_session()
        chan.request_exec('cat')
        chan.write(_in + '\n')
        self.assertEqual(chan.send_eof(), 0)
        size, data = chan.read()
        self.assertTrue(size > 0)
        lines = [line.decode('utf-8') for line in data.splitlines()]
        self.assertListEqual([_in], lines)
        chan.close()
>       chan.read()

tests/test_channel.py:173:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
ssh/channel.pyx:170: in ssh.channel.Channel.read
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

>   ???
E   ssh.exceptions.SSHError: (-1, b'Remote channel is closed.')                                                                                                                               
                                                                                                                                                                                              
ssh/utils.pyx:94: SSHError

I don't know much about libssh but reading a closed channel might be the issue. And

_____________________________ SFTPTest.test_mkdir ______________________________

self = <tests.test_sftp.SFTPTest testMethod=test_mkdir>

    def test_mkdir(self):
        mode = int("0644") if version_info <= (2,) else 0o644
        _path = 'tmp'
        abspath = os.path.join(os.path.expanduser('~'), _path)
        self._auth()
        sftp = self.session.sftp_init()
        try:
            shutil.rmtree(abspath)
        except OSError:
            pass
>       sftp.mkdir(_path, mode)

tests/test_sftp.py:357: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
ssh/sftp.pyx:165: in ssh.sftp.SFTP.mkdir
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   ssh.exceptions.SSHError: (-1, b'SFTP server: Failure')

ssh/utils.pyx:94: SSHError

I doubt '~' expansion works in a build environment

This builds fine locally, the steps are as follow (on a debian machine with buildessentials and debhelper installed, and maybe more):

# We copy the debian folder but we want to build with the 1.0.0 tree
git clone https://github.com/SCOTT-HAMILTON/ssh-python
mv ssh-python/debian .
rm -rf ssh-python

# we get the 1.0.0 tree
wget https://github.com/ParallelSSH/ssh-python/archive/refs/tags/1.0.0.tar.gz
tar -xf 1.0.0.tar.gz
mv ssh-python-1.0.0/ python3-ssh-1.0.0
mv debian python3-ssh-1.0.0

# we make the tar file
tar -czf python3-ssh_1.0.0.orig.tar.gz python3-ssh-1.0.0

# we install the build deps
cd python3-ssh-1.0.0
sudo mk-build-deps --install debian/control
rm -f python3-ssh-build-deps_1.0.0-1_all.deb

# and we finally build
debuild -us -uc

This works for me locally on ZorinOS 16.2. It also builds fine on OBS with debian testing and ubuntu 22.04 https://build.opensuse.org/package/show/home:ScottHamilton/python3-ssh.

PS:

I've noticed that the tests don't buid locally if the working directory is under /tmp. Maybe this is why the OBS build is failing, very strange ? Here is the error that I get for almost all the tests:

__________________________ SFTPTest.test_sftp_setstat __________________________

self = <tests.test_sftp.SFTPTest testMethod=test_sftp_setstat>

    def test_sftp_setstat(self):
>       self._auth()

tests/test_sftp.py:237: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base_case.py:89: in _auth
    self.session.userauth_publickey(self.pkey), 0)
ssh/session.pyx:445: in ssh.session.Session.userauth_publickey
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   ssh.exceptions.AuthenticationDenied: b"Access denied for 'publickey'. Authentication that can continue: publickey,password,keyboard-interactive"

ssh/utils.pyx:109: AuthenticationDenied

Seems like an auth error.

SCOTT-HAMILTON avatar Jul 14 '23 13:07 SCOTT-HAMILTON