Skip to content

Commit 00fc151

Browse files
author
Hongzhen Luo
committed
preliminary EROFS support for local turboOCI convertion
This is a very basic support for EROFS local OCI convertion. Unlike EXT4, EROFS doesn't need a `--import` and `export` pair to generate modified tar headers first since erofs-utils just needs to parse tar streams once. Even for parallel convertion, erofs-utils will use EROFS layer blobs directly. Also, EROFS doesn't have an explicit `--mkfs` step since `mkfs.erofs` can handle layer imports directly. Signed-off-by: Hongzhen Luo <hongzhen.lhz@linux.alibaba.com>
1 parent ccbce82 commit 00fc151

File tree

2 files changed

+30
-14
lines changed

2 files changed

+30
-14
lines changed

pkg/snapshot/storage.go

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -534,20 +534,32 @@ func (o *snapshotter) constructOverlayBDSpec(ctx context.Context, key string, wr
534534
// 1. generate tar meta for oci layer blob
535535
// 2. convert local layer.tarmeta to overlaybd
536536
// 3. create layer's config
537-
log.G(ctx).Infof("generate metadata of layer blob (sn: %s)", id)
538-
if err := utils.GenerateTarMeta(ctx, o.overlaybdOCILayerPath(id), o.overlaybdOCILayerMeta(id)); err != nil {
539-
log.G(ctx).Errorf("generate tar metadata failed. (sn: %s)", id)
540-
return err
541-
}
542-
opt := &utils.ConvertOption{
543-
TarMetaPath: o.overlaybdOCILayerMeta(id),
544-
Workdir: o.convertTempdir(id),
545-
Ext4FSMetaPath: o.magicFilePath(id), // overlaybd.commit
546-
Config: configJSON,
537+
var opt *utils.ConvertOption
538+
rootfs_type := o.defaultFsType
539+
if rootfs_type == "erofs" {
540+
opt = &utils.ConvertOption{
541+
TarMetaPath: o.overlaybdOCILayerPath(id),
542+
Workdir: o.convertTempdir(id),
543+
Ext4FSMetaPath: o.magicFilePath(id), // overlaybd.commit
544+
Config: configJSON,
545+
}
546+
} else {
547+
log.G(ctx).Infof("generate metadata of layer blob (sn: %s)", id)
548+
if err := utils.GenerateTarMeta(ctx, o.overlaybdOCILayerPath(id), o.overlaybdOCILayerMeta(id)); err != nil {
549+
log.G(ctx).Errorf("generate tar metadata failed. (sn: %s)", id)
550+
return err
551+
}
552+
553+
opt = &utils.ConvertOption{
554+
TarMetaPath: o.overlaybdOCILayerMeta(id),
555+
Workdir: o.convertTempdir(id),
556+
Ext4FSMetaPath: o.magicFilePath(id), // overlaybd.commit
557+
Config: configJSON,
558+
}
547559
}
548560
log.G(ctx).Infof("convert layer to turboOCI (sn: %s)", id)
549561

550-
if err := utils.ConvertLayer(ctx, opt); err != nil {
562+
if err := utils.ConvertLayer(ctx, opt, rootfs_type); err != nil {
551563
log.G(ctx).Error(err.Error())
552564
os.RemoveAll(opt.Workdir)
553565
os.Remove(opt.Ext4FSMetaPath)

pkg/utils/cmd.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ func GenerateTarMeta(ctx context.Context, srcTarFile string, dstTarMeta string)
182182
}
183183

184184
// ConvertLayer produce a turbooci layer, target is path of ext4.fs.meta
185-
func ConvertLayer(ctx context.Context, opt *ConvertOption) error {
185+
func ConvertLayer(ctx context.Context, opt *ConvertOption, fs_type string) error {
186186
if opt.Workdir == "" {
187187
opt.Workdir = "tmp_conv"
188188
}
@@ -199,7 +199,7 @@ func ConvertLayer(ctx context.Context, opt *ConvertOption) error {
199199

200200
// overlaybd-create
201201
args := []string{pathWritableData, pathWritableIndex, "256", "-s", "--turboOCI"}
202-
if len(opt.Config.Lowers) == 0 {
202+
if fs_type != "erofs" && len(opt.Config.Lowers) == 0 {
203203
args = append(args, "--mkfs")
204204
}
205205
if out, err := exec.CommandContext(ctx, obdBinCreate, args...).CombinedOutput(); err != nil {
@@ -231,9 +231,13 @@ func ConvertLayer(ctx context.Context, opt *ConvertOption) error {
231231
}
232232
args = []string{
233233
opt.TarMetaPath, pathConfig,
234-
"--import",
235234
"--service_config_path", pathService,
235+
"--fstype", fs_type,
236236
}
237+
if fs_type != "erofs" {
238+
args = append(args, "--import")
239+
}
240+
237241
log.G(ctx).Debugf("%s %s", obdBinTurboOCIApply, strings.Join(args, " "))
238242
if out, err := exec.CommandContext(ctx, obdBinTurboOCIApply,
239243
args...,

0 commit comments

Comments
 (0)