[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-update-rust-packages-ubuntu-releases-en":3,"article-related-update-rust-packages-ubuntu-releases-en":30,"series-tools-a899f8a7-1b6c-4bee-8e84-fb690ff2a070":75},{"id":4,"slug":5,"title":6,"content":7,"summary":8,"source":9,"source_url":10,"author":11,"image_url":12,"cover_image":12,"category":13,"language":14,"translated_content":11,"related_article_id":15,"keywords":16,"key_takeaways":22,"views":26,"created_at":27,"published_at":28,"topic_cluster_id":29},"a899f8a7-1b6c-4bee-8e84-fb690ff2a070","update-rust-packages-ubuntu-releases-en","Update Rust packages for Ubuntu releases","\u003Cp data-speakable=\"summary\">Create a new versioned rustc package for an upstream \u003Ca href=\"\u002Ftag\u002Frust\">Rust\u003C\u002Fa> release in Ubuntu.\u003C\u002Fp>\u003Cp>This guide is for Ubuntu toolchain maintainers who need to add a new Rust release to the Ubuntu archive, not for updating a local Rust install. When you finish, you will have a new versioned rustc source package prepared from upstream, patched, pruned, and ready for upload.\u003C\u002Fp>\u003Cp>It follows the Ubuntu project documentation for Rust maintenance and points to the official references on the first mention: the \u003Ca href=\"https:\u002F\u002Fubuntu.com\u002Fproject\u002Fdocs\u002Fmaintainers\u002Fniche-package-maintenance\u002Frustc\u002Fupdate-rust\u002F\">Ubuntu Rust update guide\u003C\u002Fa> and the \u003Ca href=\"https:\u002F\u002Fgit.launchpad.net\u002F~canonical-foundations\u002Fubuntu\u002F+source\u002Frustc\">Foundations rustc Git repository\u003C\u002Fa>.\u003C\u002Fp>\u003Ch2>Before you start\u003C\u002Fh2>\u003Cul>\u003Cli>An Ubuntu development machine with Git installed\u003C\u002Fli>\u003Cli>Launchpad account with SSH access\u003C\u002Fli>\u003Cli>Access to the Foundations rustc Git repository\u003C\u002Fli>\u003Cli>Rust upstream release tarball for the target version, for example 1.85.1\u003C\u002Fli>\u003Cli>Existing rustc packaging branch for the current Ubuntu release\u003C\u002Fli>\u003Cli>Build tools required by Debian packaging, including dpkg-dev and debhelper\u003C\u002Fli>\u003Cli>Enough disk space for the source tree and two orig tarballs\u003C\u002Fli>\u003Cli>Target Ubuntu series name, for example noble\u003C\u002Fli>\u003Cli>Bug number for the upload, if your workflow requires one\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>Step 1: Clone the packaging tree\u003C\u002Fh2>\u003Cp>Goal: create a local workspace that keeps the packaging branch and generated tarballs in the same parent directory, which matches Ubuntu's layout for rustc maintenance.\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1782410579036-pvm2.png\" alt=\"Update Rust packages for Ubuntu releases\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cpre>\u003Ccode>mkdir -p ~\u002Fwork\u002Frustc\ncd ~\u002Fwork\u002Frustc\ngit clone git+ssh:\u002F\u002Fgit.launchpad.net\u002F~canonical-foundations\u002Fubuntu\u002F+source\u002Frustc\ncd rustc\ngit remote add personal git+ssh:\u002F\u002Fgit.launchpad.net\u002F~YOUR_LAUNCHPAD_USERNAME\u002Fubuntu\u002F+source\u002Frustc\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Verification: you should see a rustc source directory inside a parent rustc folder, and \u003Ccode>git remote -v\u003C\u002Fcode> should list both the Foundations remote and your personal remote.\u003C\u002Fp>\u003Ch2>Step 2: Fetch the new upstream release\u003C\u002Fh2>\u003Cp>Goal: replace the old upstream source with the new Rust release so the package starts from the correct versioned code base.\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1782410583906-cvrw.png\" alt=\"Update Rust packages for Ubuntu releases\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>Download the new upstream tarball and update the versioned source files in the packaging tree, keeping the old package metadata intact for the moment. In Ubuntu's flow, this means overwriting the old upstream source with the new release content before patch refresh and pruning.\u003C\u002Fp>\u003Cp>Verification: you should see the new Rust version in the source tree, and the top-level version files should match the target release, such as 1.85.1 instead of 1.84.0.\u003C\u002Fp>\u003Ch2>Step 3: Refresh Ubuntu patches\u003C\u002Fh2>\u003Cp>Goal: make the existing Debian and Ubuntu patches apply cleanly to the new Rust sources without changing package intent.\u003C\u002Fp>\u003Cp>Rebase or refresh the patch series, then review each patch for conflicts introduced by upstream changes. Fix offsets, update context lines, and drop patches that are no longer needed if the upstream release already includes the change.\u003C\u002Fp>\u003Cp>Verification: you should be able to apply the full patch stack without fuzz or rejected hunks, and the patched tree should build from the refreshed source.\u003C\u002Fp>\u003Ch2>Step 4: Prune vendored dependencies\u003C\u002Fh2>\u003Cp>Goal: remove vendored files that Ubuntu does not need in the final source package, which keeps the archive source smaller and cleaner.\u003C\u002Fp>\u003Cp>Run the packaging pruning step to remove unnecessary vendored dependencies from the source tree. The Ubuntu guide calls for a second source download after pruning so the final orig tarball reflects the reduced file list.\u003C\u002Fp>\u003Cp>Verification: you should see the unwanted vendored crates removed, and the resulting source tree should contain only the files needed for the package build.\u003C\u002Fp>\u003Ch2>Step 5: Regenerate the orig tarballs\u003C\u002Fh2>\u003Cp>Goal: create the final source artifacts for upload, including the main orig tarball and the vendor tarball that matches the pruned file list.\u003C\u002Fp>\u003Cpre>\u003Ccode>debian\u002Frules get-orig-source\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>After pruning, regenerate the upstream source and vendor tarballs so the package records the exact upstream content you intend to ship. This is the point where the package transitions from a working tree into upload-ready source artifacts.\u003C\u002Fp>\u003Cp>Verification: you should see fresh \u003Ccode>.orig.tar.xz\u003C\u002Fcode> and \u003Ccode>.orig-vendor.tar.xz\u003C\u002Fcode> files in the parent directory, and their contents should match the target Rust release and pruned vendor set.\u003C\u002Fp>\u003Ch2>Step 6: Build and test the package\u003C\u002Fh2>\u003Cp>Goal: confirm that the new versioned package compiles and the packaging metadata is consistent before you file the upload.\u003C\u002Fp>\u003Cp>Build the source package locally or in a clean PPA, then run the package tests that apply to rustc in your release. Check the changelog, version string, and dependency metadata for the new versioned package name, such as rustc-1.85.\u003C\u002Fp>\u003Cp>Verification: you should see a successful build, a clean package test result, and a source package whose versioned name and changelog reflect the new upstream release.\u003C\u002Fp>\u003Ch2>Common mistakes\u003C\u002Fh2>\u003Cul>\u003Cli>Using the guide to update a local Rust toolchain. Fix: use rustup for developer machines; this workflow is only for Ubuntu archive packaging.\u003C\u002Fli>\u003Cli>Forgetting the second source regeneration after pruning. Fix: rerun the orig source generation step so the final tarballs match the pruned vendor list.\u003C\u002Fli>\u003Cli>Leaving patch conflicts unresolved after the upstream bump. Fix: refresh each patch against the new release and remove patches that upstream already absorbed.\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>What's next\u003C\u002Fh2>\u003Cp>After the package builds cleanly, prepare the changelog entry, upload to the appropriate Ubuntu archive, and follow the related Ubuntu docs for backporting Rust or patching Rust when your change is not a full version bump.\u003C\u002Fp>","Create a new versioned rustc package for an upstream Rust release in Ubuntu.","ubuntu.com","https:\u002F\u002Fubuntu.com\u002Fproject\u002Fdocs\u002Fmaintainers\u002Fniche-package-maintenance\u002Frustc\u002Fupdate-rust\u002F",null,"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1782410579036-pvm2.png","tools","en","009f9e6d-81c0-4d91-8ab6-e1e18b139e8f",[17,18,19,20,21],"Rust","Ubuntu","rustc","Launchpad","Debian packaging",[23,24,25],"Ubuntu Rust updates create a new versioned rustc source package for each upstream release.","The workflow is fetch, refresh patches, prune vendored dependencies, regenerate tarballs, then build and test.","This process is for Ubuntu archive maintainers, not for updating a developer workstation's Rust toolchain.",0,"2026-06-25T18:02:36.582105+00:00","2026-06-25T18:02:36.573+00:00","67ae454c-5b5e-4f58-8062-543f410e2792",{"tags":31,"relatedLang":34,"relatedPosts":38},[32],{"name":17,"slug":33},"rust",{"id":15,"slug":35,"title":36,"language":37},"update-rust-packages-ubuntu-releases-zh","Ubuntu Rust 套件更新產物清單","zh",[39,45,51,57,63,69],{"id":40,"slug":41,"title":42,"cover_image":43,"image_url":43,"created_at":44,"category":13},"96319aac-17d5-44af-bf31-54e890c13a55","cinevva-web-game-engine-guide-stack-en","Cinevva’s web-game engine guide turns picks into a stack","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1782412408146-j3pa.png","2026-06-25T18:33:04.288326+00:00",{"id":46,"slug":47,"title":48,"cover_image":49,"image_url":49,"created_at":50,"category":13},"abc842c2-f94c-4d35-8409-132d5d48f535","cursors-continue-buy-turns-copilot-into-platform-en","Cursor’s Continue buy turns Copilot into a platform","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1782411493879-bv99.png","2026-06-25T18:17:50.861849+00:00",{"id":52,"slug":53,"title":54,"cover_image":55,"image_url":55,"created_at":56,"category":13},"2856a92c-81ee-42bb-9d2c-e9542c3cd27b","prompt-versioning-belongs-in-production-en","Prompt versioning belongs in production, not in docs","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1782406069659-7nf8.png","2026-06-25T16:47:23.996479+00:00",{"id":58,"slug":59,"title":60,"cover_image":61,"image_url":61,"created_at":62,"category":13},"6b6d7ea7-7e46-49ca-9e01-ce4e55eab086","vllm-sglang-vmlx-local-llm-runtimes-en","vLLM, SGLang, vMLX: better local LLM runtimes","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1782397979639-yxxb.png","2026-06-25T14:32:28.375358+00:00",{"id":64,"slug":65,"title":66,"cover_image":67,"image_url":67,"created_at":68,"category":13},"661b3b6f-39d1-4af6-b669-e81c174a62cd","best-paper-lists-turn-conference-noise-into-taste-en","Best-paper lists turn conference noise into taste","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1782392615746-dxxf.png","2026-06-25T13:03:02.691816+00:00",{"id":70,"slug":71,"title":72,"cover_image":73,"image_url":73,"created_at":74,"category":13},"c8bffcbc-639b-4629-8e10-3695042d80e3","sora-chart-loan-timing-choice-en","SORA chart turns loan timing into a clean choice","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1782381797082-kg89.png","2026-06-25T10:02:50.585995+00:00",[76,81,86,91,96,101,106,111,116,121],{"id":77,"slug":78,"title":79,"created_at":80},"8008f1a9-7a00-4bad-88c9-3eedc9c6b4b1","surepath-ai-mcp-policy-controls-en","SurePath AI's New MCP Policy Controls Enhance AI Security","2026-03-26T01:26:52.222015+00:00",{"id":82,"slug":83,"title":84,"created_at":85},"27e39a8f-b65d-4f7b-a875-859e2b210156","mcp-standard-ai-tools-2026-en","MCP Standard in 2026: Integrating AI Tools","2026-03-26T01:27:43.127519+00:00",{"id":87,"slug":88,"title":89,"created_at":90},"165f9a19-c92d-46ba-b3f0-7125f662921d","rag-2026-transforming-enterprise-ai-en","How RAG in 2026 is Transforming Enterprise AI","2026-03-26T01:28:11.485236+00:00",{"id":92,"slug":93,"title":94,"created_at":95},"6a2a8e6e-b956-49d8-be12-cc47bdc132b2","mastering-ai-prompts-2026-guide-en","Mastering AI Prompts: A 2026 Guide for Developers","2026-03-26T01:29:07.835148+00:00",{"id":97,"slug":98,"title":99,"created_at":100},"3ab2c67e-4664-4c67-a013-687a2f605814","garry-tan-open-sources-claude-code-toolkit-en","Garry Tan Open-Sources a Claude Code Toolkit","2026-03-26T08:26:20.245934+00:00",{"id":102,"slug":103,"title":104,"created_at":105},"66a7cbf8-7e76-41d4-9bbf-eaca9761bf69","github-ai-projects-to-watch-in-2026-en","20 GitHub AI Projects to Watch in 2026","2026-03-26T08:28:09.752027+00:00",{"id":107,"slug":108,"title":109,"created_at":110},"9f332fda-eace-448a-a292-2283951eee71","practical-github-guide-learning-ml-2026-en","A Practical GitHub Guide to Learning ML in 2026","2026-03-27T01:16:50.125678+00:00",{"id":112,"slug":113,"title":114,"created_at":115},"1b1f637d-0f4d-42bd-974b-07b53829144d","aiml-2026-student-ai-ml-lab-repo-review-en","AIML-2026 Is a Bare-Bones Student Lab Repo","2026-03-27T01:21:51.661231+00:00",{"id":117,"slug":118,"title":119,"created_at":120},"6d1bf3f6-e191-4d30-b55b-8a0722fa6afe","ai-trending-github-repos-and-research-feeds-en","AI Trending Tracks Repos and Research Feeds","2026-03-27T01:31:35.709532+00:00",{"id":122,"slug":123,"title":124,"created_at":125},"010539a1-4c3a-4bd3-937a-26616422ee0d","awesome-ai-for-science-research-tools-map-en","Awesome AI for Science Is Becoming a Real Research Map","2026-03-27T01:46:50.89513+00:00"]