Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 16 Sep 2020 01:21:36 +0000
From:      bugzilla-noreply@freebsd.org
To:        ports-bugs@FreeBSD.org
Subject:   [Bug 249354] pkg upgrade re-spawns continuously when using multiple repositories
Message-ID:  <bug-249354-7788@https.bugs.freebsd.org/bugzilla/>

next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D249354

            Bug ID: 249354
           Summary: pkg upgrade re-spawns continuously when using multiple
                    repositories
           Product: Ports & Packages
           Version: Latest
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Many People
          Priority: ---
         Component: Individual Port(s)
          Assignee: ports-bugs@FreeBSD.org
          Reporter: daniel@morante.net

Summary

The pkg tool will continuously re-spawn itself during a 'pkg upgrade' when a
new version of pkg is available in the following setup:

- Poudriere on a dedicated machine is used to build custom pkg repositories
- Servers with FreeBSD that uses modern pkg, the version is irrelevant.
- [May be irrelevant] Servers have disabled the standard repository.
- Servers have are configured with two custom repositories.

Steps on how to reproduce

The contents of the repositories created with Poudriere do not matter.  Whe=
ther
it's a complete build of all packages or a specific list, the described
behavior still occurs.

1) [optional?] Disable the FreeBSD default repository by placing a file in
`/usr/local/etc/pkg/repos/FreeBSD.conf` with the following contents:

```
FreeBSD: { enabled: no }
```

2) Create two pkg repositories with Poudriere:

```
# Build and clean Repo1
poudriere bulk -j 12amd64 -z repo1 -f repo1_list -p default
poudriere pkgclean -y -j 12amd64 -z repo1 -f repo1_list  -p default

# Build and clean Repo1
poudriere bulk -j 12amd64 -z repo2 -f repo2_list -p default
poudriere pkgclean -y -j 12amd64 -z repo2 -f repo2_list  -p default
```

3) Add the two repositories to the FreeBSD client systems:

`/usr/local/etc/pkg/repos/repo1.conf`:
```
repo1: {
        url: "http://pkg.domain.tld/repo1/${ABI}",
        enabled: yes
}
```
`/usr/local/etc/pkg/repos/repo2.conf`:
```
repo2: {
        url: "http://pkg.domain.tld/repo2/${ABI}",
        enabled: yes
}
```

4) Bootstrap pkg, install and use package as you normally would.
5) On the pkg repository system, update ports tree and build repositories (=
as
done in step 2).
6) On FreeBSD client systems run `pkg upgrade`.
7) The `pkg upgrade` command continuously re-spawns itself:

```
root@freebsd-client:~ # pkg upgrade
Updating repo1 repository catalogue...
repo1 repository is up to date.
Updating repo2 repository catalogue...
repo2 repository is up to date.
All repositories are up to date.
New version of pkg detected; it needs to be installed first.
Checking integrity... done (0 conflicting)
Your packages are up to date.
Updating repo1 repository catalogue...
repo1 repository is up to date.
Updating repo2 repository catalogue...
repo2 repository is up to date.
All repositories are up to date.
New version of pkg detected; it needs to be installed first.
Checking integrity... done (0 conflicting)
Your packages are up to date.
Updating repo1 repository catalogue...
repo1 repository is up to date.
Updating repo2 repository catalogue...
repo2 repository is up to date.
All repositories are up to date.
New version of pkg detected; it needs to be installed first.
Checking integrity... done (0 conflicting)
Your packages are up to date.
...
```

8) Look as process listing `ps dauxww` and you will see multiple child
processes of `pkg upgrade`.  Note this also occurs if you specify a package
name ie. "pkg upgrade <package>"

```
root  1433   0.0  0.8  13176   7940  -  Ss   22:02    0:00.03 | `-- sshd:
root@pts/1 (sshd)
root  1435   0.0  0.4   7396   3788  1  Ss   22:02    0:00.02 |   `-- -csh
(csh)
root  1438   0.0  0.9  13912   8792  1  S+   22:02    0:00.01 |     `-- pkg
upgrade
root  1440   0.0  0.9  13912   8792  1  S+   22:02    0:00.01 |       `-- p=
kg
upgrade
root  1442   0.0  0.9  13912   8792  1  S+   22:02    0:00.01 |         `--=
 pkg
upgrade
root  1444   0.0  0.9  13912   8792  1  S+   22:02    0:00.01 |           `=
--
pkg upgrade
root  1447   0.0  0.9  13912   8792  1  S+   22:02    0:00.01 |            =
 `--
pkg upgrade
root  1449   0.0  0.9  13912   8792  1  S+   22:02    0:00.01 |=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20
`-- pkg upgrade
root  1451   0.0  0.9  13912   8792  1  S+   22:02    0:00.01 |=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20
`-- pkg upgrade
root  1453   0.0  0.9  13912   8792  1  S+   22:02    0:00.01 |=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20
  `-- pkg upgrade
root  1456   0.0  0.9  13912   8792  1  S+   22:02    0:00.01 |=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20
    `-- pkg upgrade
root  1458   0.0  0.9  13912   8792  1  S+   22:02    0:00.01 |=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20
      `-- pkg upgrade
root  1460   0.0  0.9  13912   8792  1  S+   22:02    0:00.01 |=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20
        `-- pkg upgrade
root  1462   0.0  0.9  13912   8792  1  S+   22:02    0:00.01 |=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20
          `-- pkg upgrade
root  1464   0.0  0.9  13912   8792  1  S+   22:02    0:00.01 |=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20
            `-- pkg upgrade
root  1465   0.0  1.1  15964  11628  1  D+   22:02    0:00.02 |=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20
              `-- pkg upgrade
```

9) If this is allowed to continue, all system memory will be consumed, swap
will eventually run out, and the OS will become unresponsive.

```
Sep 15 12:18:13 freebsd-client kernel: swap_pager_getswapspace(18): failed
Sep 15 12:18:13 freebsd-client kernel: swap_pager_getswapspace(32): failed
Sep 15 12:18:13 freebsd-client kernel: swap_pager_getswapspace(24): failed
Sep 15 12:18:13 freebsd-client kernel: swap_pager_getswapspace(18): failed
Sep 15 12:18:13 freebsd-client kernel: swap_pager_getswapspace(14): failed
Sep 15 12:18:13 freebsd-client kernel: swap_pager_getswapspace(8): failed
Sep 15 12:18:14 freebsd-client kernel: swap_pager_getswapspace(11): failed
Sep 15 12:18:14 freebsd-client kernel: swap_pager_getswapspace(32): failed
Sep 15 12:18:14 freebsd-client kernel: swap_pager_getswapspace(28): failed
Sep 15 12:18:14 freebsd-client kernel: swap_pager_getswapspace(21): failed
Sep 15 12:18:14 freebsd-client kernel: swap_pager_getswapspace(16): failed
Sep 15 12:18:14 freebsd-client kernel: swap_pager_getswapspace(12): failed
Sep 15 12:18:14 freebsd-client kernel: swap_pager_getswapspace(9): failed
Sep 15 12:18:14 freebsd-client kernel: swap_pager_getswapspace(9): failed
Sep 15 12:18:14 freebsd-client kernel: swap_pager_getswapspace(7): failed
Sep 15 12:18:14 freebsd-client kernel: swap_pager_getswapspace(4): failed
Sep 15 12:18:14 freebsd-client kernel: swap_pager_getswapspace(4): failed
Sep 15 12:18:14 freebsd-client kernel: swap_pager_getswapspace(6): failed
Sep 15 12:18:14 freebsd-client kernel: swap_pager_getswapspace(3): failed
```

10) To prevent the endless re-spawn, You must upgrade pkg from any reposito=
ry
by explicitly specifying one:

```
# pkg upgrade -r repo1 pkg
Updating repo1 repository catalogue...
repo1 repository is up to date.
All repositories are up to date.
New version of pkg detected; it needs to be installed first.
The following 1 package(s) will be affected (of 0 checked):

Installed packages to be UPGRADED:
        pkg: 1.14.7 -> 1.15.4 [repo1]

Number of packages to be upgraded: 1

3 MiB to be downloaded.

Proceed with this action? [y/N]:

```

-or-

```
# pkg upgrade -r repo2 pkg
Updating repo2 repository catalogue...
repo2 repository is up to date.
All repositories are up to date.
New version of pkg detected; it needs to be installed first.
The following 1 package(s) will be affected (of 0 checked):

Installed packages to be UPGRADED:
        pkg: 1.14.7 -> 1.15.4 [repo2]

Number of packages to be upgraded: 1

3 MiB to be downloaded.

```

11) After which the problem stops until a new version of pkg is once again =
made
available in the repositories

```
...
Proceed with this action? [y/N]: y
[1/1] Fetching pkg-1.15.4.txz: 100%    3 MiB   1.8MB/s    00:02
Checking integrity... done (0 conflicting)
[1/1] Upgrading pkg from 1.14.7 to 1.15.4...
[1/1] Extracting pkg-1.15.4: 100%
You may need to manually remove /usr/local/etc/pkg.conf if it is no longer
needed.
Updating repo2 repository catalogue...
repo2 repository is up to date.
All repositories are up to date.
Checking integrity... done (0 conflicting)
Your packages are up to date.

# pkg upgrade
Updating repo1 repository catalogue...
repo1 repository is up to date.
Updating repo2 repository catalogue...
repo2 repository is up to date.
All repositories are up to date.
Checking for upgrades (23 candidates): 100%
Processing candidates (23 candidates): 100%
The following 23 package(s) will be affected (of 0 checked):

Installed packages to be UPGRADED:
...
```

--=20
You are receiving this mail because:
You are the assignee for the bug.=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-249354-7788>