Skip to content

Commit

Permalink
[antlir2][prebuilt] use buckified btrfs cli
Browse files Browse the repository at this point in the history
Summary:
Instead of using the system-installed `btrfs` cli, use our new buckified
version.

NOTE: On GitHub, we will keep using the ambient `btrfs` until I buckify it
there too (which should not actually be that complicated, I just don't want it
to block my progress)

Test Plan:
Can build a prebuilt sendstream on a devserver in rootless mode
```
❯ buck2 build --show-output --modifier fbcode//antlir/antlir2/antlir2_rootless:rootless fbcode//metalos/services/base:base.prebuilt.stripped
Buck UI: https://www.internalfb.com/buck2/05de890d-73f1-426b-a565-122fc2954575
Note:    Using experimental modern dice
Network: Up: 96KiB  Down: 18MiB  (reSessionID-fe399b50-0c96-400c-86bf-312004a3f237)
BUILD SUCCEEDED
fbcode//metalos/services/base:base.prebuilt.stripped buck-out/v2/gen/fbcode/1a17158bfe8712a6/metalos/services/base/__base.prebuilt.stripped--prebuilt__/subvol_symlink

❯ stat buck-out/v2/gen/fbcode/1a17158bfe8712a6/metalos/services/base/__base.prebuilt.stripped--prebuilt__/subvol_symlink/usr
  File: buck-out/v2/gen/fbcode/1a17158bfe8712a6/metalos/services/base/__base.prebuilt.stripped--prebuilt__/subvol_symlink/usr
  Size: 116       	Blocks: 0          IO Block: 4096   directory
Device: bfh/191d	Inode: 257         Links: 1
Access: (0755/drwxr-xr-x)  Uid: (115203/  vmagro)   Gid: (  100/   users)
Access: 2021-08-09 13:40:26.000000000 -0700
Modify: 2024-06-18 08:14:07.383158968 -0700
Change: 2024-07-01 11:53:40.900222049 -0700
 Birth: 2024-07-01 11:53:37.166161971 -0700
```

Reviewed By: naveedgol

Differential Revision: D59237856

fbshipit-source-id: 129168ba52120520dfba0d4bc4a0da727eea0311
  • Loading branch information
vmagro authored and facebook-github-bot committed Jul 2, 2024
1 parent c619585 commit d551a8c
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 1 deletion.
8 changes: 7 additions & 1 deletion antlir/antlir2/antlir2_receive/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,9 @@ pub(crate) struct Receive {
#[clap(long)]
/// Use an unprivileged usernamespace
rootless: bool,
#[clap(long, default_value = "btrfs")]
/// path to 'btrfs' command
btrfs: PathBuf,
}

#[derive(Debug, Copy, Clone, ValueEnum)]
Expand Down Expand Up @@ -97,12 +100,15 @@ impl Receive {
match self.format {
Format::Sendstream => {
let recv_tmp = tempfile::tempdir_in(&self.setup.working_dir)?;
let mut cmd = Command::new("btrfs");
let mut cmd = Command::new(self.btrfs);
cmd.arg("--quiet")
.arg("receive")
.arg(recv_tmp.path())
.arg("-f")
.arg(&self.source);
if self.rootless {
cmd.arg("--force-decompress");
}
trace!("receiving sendstream: {cmd:?}");
let res = cmd.spawn()?.wait()?;
ensure!(res.success(), "btrfs-receive failed");
Expand Down
8 changes: 8 additions & 0 deletions antlir/antlir2/bzl/image/prebuilt.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ load("//antlir/antlir2/antlir2_rootless:package.bzl", "get_antlir2_rootless")
load("//antlir/antlir2/bzl:macro_dep.bzl", "antlir2_dep")
load("//antlir/antlir2/bzl:platform.bzl", "rule_with_default_target_platform")
load("//antlir/antlir2/bzl:types.bzl", "BuildApplianceInfo", "FlavorInfo", "LayerContents", "LayerInfo")
load("//antlir/bzl:build_defs.bzl", "internal_external")
load(":facts.bzl", "facts")

PrebuiltImageInfo = provider(fields = [
Expand Down Expand Up @@ -87,6 +88,7 @@ def _impl(ctx: AnalysisContext) -> list[Provider]:
ctx.attrs.antlir2_receive[RunInfo],
"--working-dir=antlir2-out",
cmd_args(format, format = "--format={}"),
cmd_args(ctx.attrs._btrfs[RunInfo], format = "--btrfs={}") if format == "sendstream" and ctx.attrs._btrfs else cmd_args(),
cmd_args(src, format = "--source={}"),
cmd_args(subvol_symlink.as_output(), format = "--output={}"),
cmd_args("--rootless") if ctx.attrs._rootless else cmd_args(),
Expand Down Expand Up @@ -138,6 +140,7 @@ _prebuilt = rule(
"format": attrs.enum(["cas_dir", "sendstream.v2", "sendstream", "sendstream.zst", "tar", "caf"]),
"labels": attrs.list(attrs.string(), default = []),
"src": attrs.source(doc = "source file of the image"),
"_btrfs": attrs.option(attrs.exec_dep()),
"_new_facts_db": attrs.exec_dep(default = antlir2_dep("//antlir/antlir2/antlir2_facts:new-facts-db")),
"_overlayfs": attrs.bool(default = False),
"_rootless": attrs.default_only(attrs.bool(default = select({
Expand All @@ -163,6 +166,11 @@ def prebuilt(*args, **kwargs):
if not rootless:
kwargs["labels"] = selects.apply(kwargs.pop("labels", []), lambda labels: labels + ["uses_sudo"])

kwargs["_btrfs"] = internal_external(
fb = "fbsource//third-party/btrfs-progs:btrfs",
oss = None,
)

_prebuilt_macro(
*args,
**kwargs
Expand Down

0 comments on commit d551a8c

Please sign in to comment.