How to have two versions of a snap on the same offline proxy server

Hello community,

On a Linux server configured in proxy store offline mode, Can we have 2 versions or revisions of a snap in order to be able to provide different package versions for different clients (in pre-prod and prod environment) ?

Thank you in advance !

You can use parallel instances to install the snap twice, each time with a different instance key. Those are then separate installations that may even track different channels or tracks.

See: https://snapcraft.io/docs/parallel-installs

EDIT: The intent was to install the proxy twice and then configure separately for individual clients.

Hi Zyga,

Ok, I’ll try that

Thank you very much !!

Hello,

I try to install 2 proxy, but I encounter this error :

[root@localhost ~]# snap install snap-store-proxy snap-store-proxy_preprod

2024-01-24T08:12:44-05:00 INFO Waiting for automatic snapd restart…

2024-01-24T08:13:20-05:00 INFO Waiting for conflicting change in progress: conflicting slot snap snapd, task “connect”

error: cannot perform the following tasks:

  • Set automatic aliases for snap “snap-store-proxy_preprod” (cannot enable alias “snap-proxy” for “snap-store-proxy_preprod”, already enabled for “snap-store-proxy”)

Can you help me? Thank you !

You have to allow snapd to not set up automatic aliases with:

snap install ... --unaliased

Apologies, I didn’t think of that part before.

Ok,

Thank you !! :+1:

Hi Zyga,

I have this error now, do you have any idea ?

[root@localhost ~]# **snap install snap-store-proxy snap-store-proxy_preprod --unaliased**

2024-01-24T11:31:04-05:00 INFO Waiting for automatic snapd restart...
2024-01-24T11:31:31-05:00 INFO Waiting for conflicting change in progress: conflicting slot snap snapd, task "connect"
error: cannot perform the following tasks:
- Run configure hook of "snap-store-proxy_preprod" snap if present (run hook "configure": 
-----
+ set -o pipefail
+ LD_PATH=/var/lib/snapd/lib/gl:/var/lib/snapd/lib/gl32:/var/lib/snapd/void:/snap/snap-store-proxy/98/lib:/snap/snap-store-proxy/98/usr/lib:/snap/snap-store-proxy/98/usr/lib/x86_64-linux-gnu
+ export PATH=/snap/snap-store-proxy/98/usr/sbin:/snap/snap-store-proxy/98/usr/bin:/snap/snap-store-proxy/98/sbin:/snap/snap-store-proxy/98/bin:/snap/snap-store-proxy/98/usr/sbin:/snap/snap-store-proxy/98/usr/bin:/snap/snap-store-proxy/98/sbin:/snap/snap-store-proxy/98/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
+ PATH=/snap/snap-store-proxy/98/usr/sbin:/snap/snap-store-proxy/98/usr/bin:/snap/snap-store-proxy/98/sbin:/snap/snap-store-proxy/98/bin:/snap/snap-store-proxy/98/usr/sbin:/snap/snap-store-proxy/98/usr/bin:/snap/snap-store-proxy/98/sbin:/snap/snap-store-proxy/98/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
+ export LD_LIBRARY_PATH=/var/lib/snapd/lib/gl:/var/lib/snapd/lib/gl32:/var/lib/snapd/void:/snap/snap-store-proxy/98/lib:/snap/snap-store-proxy/98/usr/lib:/snap/snap-store-proxy/98/usr/lib/x86_64-linux-gnu:/snap/snap-store-proxy/98/lib:/snap/snap-store-proxy/98/usr/lib:/snap/snap-store-proxy/98/usr/lib/x86_64-linux-gnu
+ LD_LIBRARY_PATH=/var/lib/snapd/lib/gl:/var/lib/snapd/lib/gl32:/var/lib/snapd/void:/snap/snap-store-proxy/98/lib:/snap/snap-store-proxy/98/usr/lib:/snap/snap-store-proxy/98/usr/lib/x86_64-linux-gnu:/snap/snap-store-proxy/98/lib:/snap/snap-store-proxy/98/usr/lib:/snap/snap-store-proxy/98/usr/lib/x86_64-linux-gnu
+ export LD_LIBRARY_PATH=/snap/snap-store-proxy/98/usr/lib/x86_64-linux-gnu:/var/lib/snapd/lib/gl:/var/lib/snapd/lib/gl32:/var/lib/snapd/void:/snap/snap-store-proxy/98/lib:/snap/snap-store-proxy/98/usr/lib:/snap/snap-store-proxy/98/usr/lib/x86_64-linux-gnu:/snap/snap-store-proxy/98/lib:/snap/snap-store-proxy/98/usr/lib:/snap/snap-store-proxy/98/usr/lib/x86_64-linux-gnu
+ LD_LIBRARY_PATH=/snap/snap-store-proxy/98/usr/lib/x86_64-linux-gnu:/var/lib/snapd/lib/gl:/var/lib/snapd/lib/gl32:/var/lib/snapd/void:/snap/snap-store-proxy/98/lib:/snap/snap-store-proxy/98/usr/lib:/snap/snap-store-proxy/98/usr/lib/x86_64-linux-gnu:/snap/snap-store-proxy/98/lib:/snap/snap-store-proxy/98/usr/lib:/snap/snap-store-proxy/98/usr/lib/x86_64-linux-gnu
+ export LD_LIBRARY_PATH=/var/lib/snapd/lib/gl:/var/lib/snapd/lib/gl32:/var/lib/snapd/void:/snap/snap-store-proxy/98/usr/lib/x86_64-linux-gnu:/var/lib/snapd/lib/gl:/var/lib/snapd/lib/gl32:/var/lib/snapd/void:/snap/snap-store-proxy/98/lib:/snap/snap-store-proxy/98/usr/lib:/snap/snap-store-proxy/98/usr/lib/x86_64-linux-gnu:/snap/snap-store-proxy/98/lib:/snap/snap-store-proxy/98/usr/lib:/snap/snap-store-proxy/98/usr/lib/x86_64-linux-gnu
+ LD_LIBRARY_PATH=/var/lib/snapd/lib/gl:/var/lib/snapd/lib/gl32:/var/lib/snapd/void:/snap/snap-store-proxy/98/usr/lib/x86_64-linux-gnu:/var/lib/snapd/lib/gl:/var/lib/snapd/lib/gl32:/var/lib/snapd/void:/snap/snap-store-proxy/98/lib:/snap/snap-store-proxy/98/usr/lib:/snap/snap-store-proxy/98/usr/lib/x86_64-linux-gnu:/snap/snap-store-proxy/98/lib:/snap/snap-store-proxy/98/usr/lib:/snap/snap-store-proxy/98/usr/lib/x86_64-linux-gnu
++ basename /snap/snap-store-proxy/98/snap/hooks/configure
+ HOOK_NAME=configure
+ export HOOK_NAME
+ exec
++ tee /var/snap/snap-store-proxy/98/configure.log
+ export PYTHONUSERBASE=/snap/snap-store-proxy/98
+ PYTHONUSERBASE=/snap/snap-store-proxy/98
+ exec /snap/snap-store-proxy/98/bin/configure
+ tee /dev/fd/63
++ systemd-cat -t snap-store-proxy.configure
Traceback (most recent call last):
 
 File "/snap/snap-store-proxy/98/bin/configure", line 8, in <module>
    sys.exit(main())
  
File "/snap/snap-store-proxy/98/lib/python3.10/site-packages/snapstore/configure.py", line 805, in main
    configure()
  
File "/snap/snap-store-proxy/98/lib/python3.10/site-packages/snapstore/configure.py", line 696, in configure
    restart_services(config)
  
File "/snap/snap-store-proxy/98/lib/python3.10/site-packages/snapstore/configure.py", line 787, in restart_services
    snapctl(*restart_args, *services_to_restart)
  
File "/snap/snap-store-proxy/98/lib/python3.10/site-packages/snapstore/utils.py", line 167, in snapctl
    return run_stdout(['snapctl'] + list(args))
  
File "/snap/snap-store-proxy/98/lib/python3.10/site-packages/snapstore/utils.py", line 79, in run_stdout
    return subprocess.check_output(cmd, **kwargs).strip()
 
 File "/usr/lib/python3.10/subprocess.py", line 421, in check_output
    return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
  
File "/usr/lib/python3.10/subprocess.py", line 526, in run
    raise CalledProcessError(retcode, process.args,

subprocess.CalledProcessError: Command '['snapctl', 'restart', '--reload', 'snap-store-proxy.memcached', 'snap-store-proxy.snapproxy', 'snap-store-proxy.snapauth', 'snap-store-proxy.nginx', 'snap-store-proxy.snaprevs', 'snap-store-proxy.snapdevicegw']' returned non-zero exit status 1.
-----)

Thank you !

Apologies for not providing very useful advice. Apparently the parallel install feature is somehow broken on this snap. I can reproduce the failure but I cannot yet find the cause of the bug.

EDIT: @mborzecki1 I have feeling snapctl is subtly broken with instance keys. Something to discuss later this week perhaps.

EDIT 2: This is now tracked internally as SNAPDENG-15234

Hi Zyga,

Thank you very much for the information !!

Hi @jac77, I haven’t tested this myself, but maybe you can use channels? if those 2 revisions are in different channels, e.g: stable and beta

Cheers

Hi @verterok ,
we wanted to have two stable channel revisions for our developers.
For the moment, we will only make the latest revision available.

Thank you