# Notes on onecontainer use ## Overview * Blog-post references old versions (f31, pulp-3.4, etc) * Should mention "assumes you have docker/podman installed for your distribution" * F33 fails to get container running * Podman shows multiple registries, remind again that we're only in dockerhub * Trying admin-pwd/status-check "too soon" can fail with scary errors * wait ~60s post-spinup to avoid * Starting a second container with these instructions kills the current one due to shared volumes (maybe need an advanced-topics page?) * see ggainey/pulp_startup/onecontainer/start_all for getting around that ## Links * https://pulpproject.org/pulp-in-one-container/ * https://github.com/ggainey/pulp_startup/tree/main/onecontainer ## Notes/how-tos ### Windows10 install wsl install docker in wsl sudo apt install pip python3-virtualenv fuse https://gist.github.com/fedme/442e7d1d7eb7d68e02cfbf6441d42759 vi .bashrc export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 export WORKON_HOME=~/.venvs source ~/.local/bin/virtualenvwrapper.sh export PIP_VIRTUALENV_BASE=~/.venvs source .bashrc mkdir settings pulp_storage pgsql containers $ echo "CONTENT_ORIGIN='http://`hostname`:8080' ANSIBLE_API_HOSTNAME='http://`hostname`:8080' ANSIBLE_CONTENT_HOSTNAME='http://`hostname`:8080/pulp/content' TOKEN_AUTH_DISABLED=True" >> settings/settings.py https://www.redhat.com/sysadmin/podman-windows-wsl2 https://docs.microsoft.com/en-us/windows/wsl/install sudo vi sudo podman ### Pavel's Win10 approach install WSL and Docker for Windows * make sure that "Use of WSL" at docker installation time is ticked * after installation docker ask you for one more package with a link (it is directly m$ site) so install and restart docker * create init.bat file in project folder (my was C:\Pavel\Projects\Pulp\) ``` mkdir settings pulp_storage pgsql containers ( echo CONTENT_ORIGIN='http://%COMPUTERNAME%:8080' echo ANSIBLE_API_HOSTNAME='http://%COMPUTERNAME%:8080' echo ANSIBLE_CONTENT_HOSTNAME='http://%COMPUTERNAME%:8080/pulp/content' echo TOKEN_AUTH_DISABLED=True ) > settings\settings.py docker run ^ --detach ^ --publish 8080:80 ^ --name pulp ^ --volume "%cd%/settings":/etc/pulp ^ --volume "%cd%/pulp_storage":/var/lib/pulp ^ --volume "%cd%/pgsql":/var/lib/pgsql ^ --volume "%cd%/containers":/var/lib/containers ^ --device /dev/fuse ^ pulp/pulp REM We need to wait here for pure WSL performance. On my machine with i7 20 secs was ok. timeout 60 docker exec -it pulp bash -c "pulpcore-manager reset-admin-password" ``` * and run it * as mentioned above after docker run **wait** about 60 secs (timeout in script) * after new password is set up pulp is available at http://localhost:8080/pulp/api/v3/status/ * Personally I used VSCode with "Remote - Containers" addon to attach to Pulp - what means remote devel/debug/terminal. ### Notes about pulp-cli Will open issues for these "soon" * Would be nice if `pulp config create` took `--profile` option and created a new stanza (`edit` exists, this would be a nice-to-have) * profiles in .toml are "cli-<profilename". This isn't really very clear, and **very** confusing if you don't realize what's going on. * .toml keys have rules - primary being ". means more than you think it does". Results when you break this rule are...non-obvious. ### Notes not related to improving-one-container, just so I don't forget them Getting CLI up-for-dev on a "naked" box (starting from "fedora34" vagrant VM from pulp_installer) ~~~ cd sudo dnf install git git clone https://github.com/pulp/pulp-cli.git sudo dnf install python3-virtualenv pip install virtualenvwrapper source .local/bin/virtualenvwrapper.sh mkvirtualenv pulp-cli workon pulp-cli cd pulp-cli pip install -e . ~~~ Resetting the container's DB w/out starting up a new container ~~~ podman exec -it pulp bash -c "pip install django-extensions" podman exec -it pulp bash -c "pulpcore-manager reset_db -U postgres -c --noinput" podman exec -it pulp bash -c "s6-svc -d /var/run/s6/services/pulpcore-content" podman exec -it pulp bash -c "pulpcore-manager migrate" podman exec -it pulp bash -c "s6-svc -r /var/run/s6/services/pulpcore-worker@1" podman exec -it pulp bash -c "s6-svc -r /var/run/s6/services/pulpcore-worker@2" podman exec -it pulp bash -c 'pulpcore-manager reset-admin-password' pulp --username admin --password admin rpm remote create --name foo --url "https://example.com/" ~~~ Access content-app from "outside" your VM (8000 is 'your machine' port to access, '8080' is the port "inside" of pulp) ~~~ vagrant ssh fedora34 -- -L 8000:fedora34.padre-fedora.example.com:8080 In external browser : http://localhost:8000/pulp/content/ ~~~ ### Get pulp-ui installed, running, contacted ~~~ sudo dnf install -y npm git clone https://github.com/pulp/pulp-ui.git cd pulp-ui/pulp_ui/app/ npm install npm run start:dev >> out.txt & From outside-the-vagrant-box, set up SSH-tunnel to the UI's port: vagrant ssh fedora34 -- -L 8081:fedora34.padre-fedora.example.com:9000 In external browser: localhost:8081 : ta-da! Dashboard page! ~~~ ## Detailed errors ### From F33 ~~~ Copying config 0c22088e15 done Writing manifest to image destination Storing signatures Error: OCI runtime error: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: Running hook #1:: error running hook: exit status 1, stdout: , stderr: ~~~ No error message, it just fails to start. ### Deprecated JSON Running latest, lots of scary-looking "Deprecated JSON" messages still. **I** know what they are - but to a new user, this is suboptimal. ### Scary database failures If you try to set admin-db-pwd or get status "too quickly", you can end up with scary-looking errors. First guess is "hitting the container before migrations are finished is Bad, please don't." Waiting (literally) a minute and re-running works fine. Might want to document, along with the symptomatic strings from the list below. ~~~ [vagrant@fedora34 onecontainer]$ curl localhost:8080/pulp/api/v3/status/ curl: (56) Recv failure: Connection reset by peer ~~~ ~~~ Traceback (most recent call last): File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 581, in get_or_create return self.get(**kwargs), False File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 435, in get raise self.model.DoesNotExist( django.contrib.auth.models.DoesNotExist: User matching query does not exist. During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute return self.cursor.execute(sql, params) psycopg2.errors.NotNullViolation: null value in column "last_login" violates not-null constraint DETAIL: Failing row contains (1, , null, t, admin, , , , t, t, 2021-10-03 15:03:14.407959+00). ~~~ ~~~ 2021-10-02 16:10:46.133 UTC [14867] LOG: starting PostgreSQL 12.7 on x86_64-redhat-linux-gnu, compiled by gcc (GCC) 8.3.1 20191121 (Red Hat 8.3.1-5), 64-bit 2021-10-02 16:10:46.134 UTC [14867] LOG: listening on IPv6 address "::1", port 5432 2021-10-02 16:10:46.134 UTC [14867] LOG: listening on IPv4 address "127.0.0.1", port 5432 2021-10-02 16:10:46.184 UTC [14867] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432" 2021-10-02 16:10:46.235 UTC [14867] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432" 2021-10-02 16:10:46.289 UTC [14867] LOG: redirecting log output to logging collector process 2021-10-02 16:10:46.289 UTC [14867] HINT: Future log output will appear in directory "log". pulp [None]: pulpcore.app.serializers.base:WARNING: Please provide either 'view_name' or 'view_name_pattern' for DetailRelatedField on _call_with_frames_removed. Operations to perform: Apply all migrations: admin, ansible, auth, certguard, container, contenttypes, core, deb, file, guardian, maven, python, rpm, sessions Running migrations: Applying rpm.0025_remove_orphaned_subrepos...Traceback (most recent call last): File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py", line 84, in _execute return self.cursor.execute(sql, params) psycopg2.ProgrammingError: column core_repository.retained_versions does not exist LINE 1: ...tory"."pulp_type", "core_repository"."remote_id", "core_repo... ~~~