[Bug 2100266] Re: Versioned cargo wrapper script points to default cargo

Max Gilmour 2100266 at bugs.launchpad.net
Tue Apr 14 16:25:35 UTC 2026


** Description changed:

  [ Impact ]
  
   * If you use the Cargo wrapper script provided by a versioned
     cargo package, e.g. /usr/lib/rust-1.85/share/cargo/bin/cargo,
     it will invoke /usr/bin/cargo rather than
     /usr/lib/rust-1.85/bin/cargo.
  
   * This means that users expecting a particular Cargo version are
     actually invoking the rust-defaults Cargo version behind the
     scenes.
  
   * Additionally, if the rust-defaults Cargo version isn't
     installed, the versioned Cargo wrapper script doesn't work at
     all (because it's trying to invoke the nonexistent default).
  
   * As stated in the comments of this bug report, this is blocking
     the update of authd's Rust dependencies.
  
   * This upload fixes the bug by making the Cargo wrapper script
     invoke the versioned Cargo instead.
  
  [ Test Plan ]
  
-  * To ensure the fix is comprehensive, all documented usages of the
-    wrapper script must be performed without installing any
-    rust-defaults packages. That way, if the system attempts to use
-    any default cargo functionality, we will get a hard "missing file"
-    error rather than a silent usage of default cargo.
+  * To ensure the fix is comprehensive, all documented usages of the
+    wrapper script must be performed without installing any
+    rust-defaults packages. That way, if the system attempts to use
+    any default cargo functionality, we will get a hard "missing file"
+    error rather than a silent usage of default cargo.
  
-  * Install the versioned cargo and a basic Rust library dependency:
-    - # apt install -y cargo-1.91 librust-anyhow-dev dpkg-dev
+  * Install the versioned cargo and a basic Rust library dependency:
+    - # apt install -y cargo-1.91 librust-anyhow-dev dpkg-dev
  
-  * Create a new Rust project:
-    - $ cargo-1.91 new hello
-    - $ cd hello
+  * Create a new Rust project:
+    - $ cargo-1.91 new hello
+    - $ cd hello
  
-  * Add the library dependency to the project:
-    - $ cargo-1.91 add anyhow at 1
+  * Add the library dependency to the project:
+    - $ echo 'anyhow = "1"' >> Cargo.toml
  
-  * Edit ./src/main.rs to use anyhow:
-    - $ echo 'fn main() -> anyhow::Result<()> { Ok(()) }' >src/main.rs
+  * Edit ./src/main.rs to use anyhow:
+    - $ echo 'fn main() -> anyhow::Result<()> { Ok(()) }' >src/main.rs
  
-  * Download the makefile which runs all the different wrapper script
-    functions:
-    - $ wget 'https://drive.google.com/uc?export=download&id=1qv1n2WwCN26O1YLHF60pRR71xzWH9Inm' -O Makefile
+  * Download the makefile which runs all the different wrapper script
+    functions:
+    - $ wget 'https://drive.google.com/uc?export=download&id=1qv1n2WwCN26O1YLHF60pRR71xzWH9Inm' -O Makefile
  
-  * Run the Makefile, setting the expected Rust version:
-    - $ RUST_VERSION='1.91' make test
+  * Run the Makefile, setting the expected Rust version:
+    - $ RUST_VERSION='1.91' make test
  
-  * The script should fail when it tries to invoke /usr/bin/cargo.
+  * The script should fail when it tries to invoke /usr/bin/cargo.
  
-  * To test the fixed version, add the PPA and install the fixed
-    cargo-1.91:
-    - # add-apt-repository -y ppa:maxgmr/lp2100266-2
-    - # apt update
-    - # apt install -y cargo-1.91
+  * To test the fixed version, add the PPA and install the fixed
+    cargo-1.91:
+    - # add-apt-repository -y ppa:maxgmr/lp2100266-2
+    - # apt update
+    - # apt install -y cargo-1.91
  
-  * Running the Makefile once more should succeed:
-    - $ RUST_VERSION='1.91' make test
+  * Running the Makefile once more should succeed:
+    - $ RUST_VERSION='1.91' make test
  
  [ Where problems could occur ]
  
   * This upload changes the toolchain version which is invoked by the
     versioned Cargo wrapper. As a result, applying this SRU means that
     packages will be built with a different Rust version. The regression
-    risk depends on the difference between the default Rust version and
-    the patched Rust version for the given series. For example, on
-    Noble, patching rustc-1.91 will mean that when running cargo-1.91,
-    Rust 1.91 is used instead of the default of 1.75 on Noble. This
-    means that anything that is built by the versioned rustc/cargo has
-    a risk of FTBFS if they need to be rebuilt for whatever reason.
+    risk depends on the difference between the default Rust version and
+    the patched Rust version for the given series. For example, on
+    Noble, patching rustc-1.91 will mean that when running cargo-1.91,
+    Rust 1.91 is used instead of the default of 1.75 on Noble. This
+    means that anything that is built by the versioned rustc/cargo has
+    a risk of FTBFS if they need to be rebuilt for whatever reason.
  
-  * Since Rust upstream is committed to backwards compatibility, risk
-    of FTBFS from upstream changes is minimal.
+  * Since Rust upstream is committed to backwards compatibility, risk
+    of FTBFS from upstream changes is minimal.
  
-  * No Rust packages which build using the default non-versioned
-    Rust (the overwhelming majority) will be affected at all.
+  * No Rust packages which build using the default non-versioned
+    Rust (the overwhelming majority) will be affected at all.
  
-  * Most FTBFS risk stems from packaging changes from the default
-    version to the backported version. For instance, newer cargo
-    packages add a key to packages' Cargo.tomls during preconfiguration.
-    If a package already includes that key in its Cargo.toml, that
-    package will FTBFS. 
+  * Most FTBFS risk stems from packaging changes from the default
+    version to the backported version. For instance, newer cargo
+    packages add a key to packages' Cargo.tomls during preconfiguration.
+    If a package already includes that key in its Cargo.toml, that
+    package will FTBFS.
  
   * Luckily, in practice, regression risk is very low because very few
-    packages opt-in to using the backported versioned toolchains over the
-    default version. For instance, not a single package in the archive is
-    currently built by rustc-1.91 on Noble:
-    - $ ./checkrdepends --include-provides --no-ports --suite noble \
-          --archive-base 'http://archive.ubuntu.com/ubuntu' rustc
-        [empty output]
+    packages opt-in to using the backported versioned toolchains over the
+    default version. For instance, not a single package in the archive is
+    currently built by rustc-1.91 on Noble:
+    - $ ./checkrdepends --include-provides --no-ports --suite noble \
+          --archive-base 'http://archive.ubuntu.com/ubuntu' rustc
+        [empty output]
  
-  * To further verify that FTBFSs will be rare, I rebuilt some packages in
-    a PPA[1]. They all built without issue except for lace, which failed
-    due to the aforementioned duplicate Cargo.toml key issue. (I have
-    submitted a fix for the issue[2].)
+  * To further verify that FTBFSs will be rare, I rebuilt some packages in
+    a PPA[1]. They all built without issue except for lace, which failed
+    due to the aforementioned duplicate Cargo.toml key issue. (I have
+    submitted a fix for the issue[2].)
  
  [1]: https://launchpad.net/~maxgmr/+archive/ubuntu/lp2100266-2/+packages
  [2]: https://github.com/canonical/lace/pull/41

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to rustc-1.76 in Ubuntu.
Matching subscriptions: rustc-1.93
https://bugs.launchpad.net/bugs/2100266

Title:
  Versioned cargo wrapper script points to default cargo

Status in rustc-1.76 package in Ubuntu:
  Invalid
Status in rustc-1.77 package in Ubuntu:
  Invalid
Status in rustc-1.78 package in Ubuntu:
  Invalid
Status in rustc-1.79 package in Ubuntu:
  Invalid
Status in rustc-1.80 package in Ubuntu:
  Invalid
Status in rustc-1.81 package in Ubuntu:
  In Progress
Status in rustc-1.82 package in Ubuntu:
  In Progress
Status in rustc-1.83 package in Ubuntu:
  In Progress
Status in rustc-1.84 package in Ubuntu:
  In Progress
Status in rustc-1.85 package in Ubuntu:
  In Progress
Status in rustc-1.88 package in Ubuntu:
  In Progress
Status in rustc-1.91 package in Ubuntu:
  New
Status in rustc-1.92 package in Ubuntu:
  New
Status in rustc-1.93 package in Ubuntu:
  New
Status in rustc-1.76 source package in Focal:
  New
Status in rustc-1.77 source package in Focal:
  New
Status in rustc-1.78 source package in Focal:
  New
Status in rustc-1.79 source package in Focal:
  New
Status in rustc-1.80 source package in Focal:
  New
Status in rustc-1.76 source package in Jammy:
  New
Status in rustc-1.77 source package in Jammy:
  New
Status in rustc-1.78 source package in Jammy:
  New
Status in rustc-1.79 source package in Jammy:
  New
Status in rustc-1.80 source package in Jammy:
  New
Status in rustc-1.76 source package in Noble:
  New
Status in rustc-1.77 source package in Noble:
  New
Status in rustc-1.78 source package in Noble:
  New
Status in rustc-1.79 source package in Noble:
  New
Status in rustc-1.80 source package in Noble:
  New
Status in rustc-1.81 source package in Noble:
  New
Status in rustc-1.82 source package in Noble:
  New
Status in rustc-1.83 source package in Noble:
  New
Status in rustc-1.84 source package in Noble:
  New
Status in rustc-1.85 source package in Noble:
  In Progress
Status in rustc-1.80 source package in Oracular:
  Won't Fix
Status in rustc-1.81 source package in Oracular:
  Won't Fix
Status in rustc-1.81 source package in Plucky:
  Won't Fix
Status in rustc-1.82 source package in Plucky:
  Won't Fix
Status in rustc-1.83 source package in Plucky:
  Won't Fix
Status in rustc-1.84 source package in Plucky:
  Won't Fix
Status in rustc-1.85 source package in Questing:
  In Progress
Status in rustc-1.88 source package in Questing:
  New
Status in rustc-1.88 source package in Resolute:
  In Progress

Bug description:
  [ Impact ]

   * If you use the Cargo wrapper script provided by a versioned
     cargo package, e.g. /usr/lib/rust-1.85/share/cargo/bin/cargo,
     it will invoke /usr/bin/cargo rather than
     /usr/lib/rust-1.85/bin/cargo.

   * This means that users expecting a particular Cargo version are
     actually invoking the rust-defaults Cargo version behind the
     scenes.

   * Additionally, if the rust-defaults Cargo version isn't
     installed, the versioned Cargo wrapper script doesn't work at
     all (because it's trying to invoke the nonexistent default).

   * As stated in the comments of this bug report, this is blocking
     the update of authd's Rust dependencies.

   * This upload fixes the bug by making the Cargo wrapper script
     invoke the versioned Cargo instead.

  [ Test Plan ]

   * To ensure the fix is comprehensive, all documented usages of the
     wrapper script must be performed without installing any
     rust-defaults packages. That way, if the system attempts to use
     any default cargo functionality, we will get a hard "missing file"
     error rather than a silent usage of default cargo.

   * Install the versioned cargo and a basic Rust library dependency:
     - # apt install -y cargo-1.91 librust-anyhow-dev dpkg-dev

   * Create a new Rust project:
     - $ cargo-1.91 new hello
     - $ cd hello

   * Add the library dependency to the project:
     - $ echo 'anyhow = "1"' >> Cargo.toml

   * Edit ./src/main.rs to use anyhow:
     - $ echo 'fn main() -> anyhow::Result<()> { Ok(()) }' >src/main.rs

   * Download the makefile which runs all the different wrapper script
     functions:
     - $ wget 'https://drive.google.com/uc?export=download&id=1qv1n2WwCN26O1YLHF60pRR71xzWH9Inm' -O Makefile

   * Run the Makefile, setting the expected Rust version:
     - $ RUST_VERSION='1.91' make test

   * The script should fail when it tries to invoke /usr/bin/cargo.

   * To test the fixed version, add the PPA and install the fixed
     cargo-1.91:
     - # add-apt-repository -y ppa:maxgmr/lp2100266-2
     - # apt update
     - # apt install -y cargo-1.91

   * Running the Makefile once more should succeed:
     - $ RUST_VERSION='1.91' make test

  [ Where problems could occur ]

   * This upload changes the toolchain version which is invoked by the
     versioned Cargo wrapper. As a result, applying this SRU means that
     packages will be built with a different Rust version. The regression
     risk depends on the difference between the default Rust version and
     the patched Rust version for the given series. For example, on
     Noble, patching rustc-1.91 will mean that when running cargo-1.91,
     Rust 1.91 is used instead of the default of 1.75 on Noble. This
     means that anything that is built by the versioned rustc/cargo has
     a risk of FTBFS if they need to be rebuilt for whatever reason.

   * Since Rust upstream is committed to backwards compatibility, risk
     of FTBFS from upstream changes is minimal.

   * No Rust packages which build using the default non-versioned
     Rust (the overwhelming majority) will be affected at all.

   * Most FTBFS risk stems from packaging changes from the default
     version to the backported version. For instance, newer cargo
     packages add a key to packages' Cargo.tomls during preconfiguration.
     If a package already includes that key in its Cargo.toml, that
     package will FTBFS.

   * Luckily, in practice, regression risk is very low because very few
     packages opt-in to using the backported versioned toolchains over the
     default version. For instance, not a single package in the archive is
     currently built by rustc-1.91 on Noble:
     - $ ./checkrdepends --include-provides --no-ports --suite noble \
           --archive-base 'http://archive.ubuntu.com/ubuntu' rustc
         [empty output]

   * To further verify that FTBFSs will be rare, I rebuilt some packages in
     a PPA[1]. They all built without issue except for lace, which failed
     due to the aforementioned duplicate Cargo.toml key issue. (I have
     submitted a fix for the issue[2].)

  [1]: https://launchpad.net/~maxgmr/+archive/ubuntu/lp2100266-2/+packages
  [2]: https://github.com/canonical/lace/pull/41

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/rustc-1.76/+bug/2100266/+subscriptions





More information about the foundations-bugs mailing list