root以外のユーザーによるファイルシステムの作成

root以外のユーザーによるファイルシステムの作成

ルート以外のユーザーとしてファイルシステムイメージを作成したいと思います。現在直面している問題は、root以外のユーザーがインストールできないインストールが必要であることです。

これが私が今やっていることです:

#!/bin/sh

IMG="app.ext4"
LBL="PIHU_APP"
MNT="/mnt/PIHU_APP"
APP="/home/buildroot/board/arctura/PIHU_APP/application"

#64MB:
dd if=/dev/zero of=$IMG bs=4096 count=16384

mkfs.ext4 $IMG
e2label $IMG $LBL

mkdir -p $MNT
mount -o loop $IMG $MNT
cp -r $APP $MNT
sync
umount $MNT

私はすべてを設定/準備できるようにフルrootアクセス権を持っていますが、スクリプトはrootではなくアカウントで実行されます。

しかし、インストールを必要としないより良い方法があるかもしれないと感じていますが、わかりません。

ベストアンサー1

mke2fs -d最小限の実行可能な例、不要sudo

mke2fse2fsprogs パッケージの一部です。 2018年、Googleで働いた有名なLinuxカーネルファイルシステム開発者Theodore Ts'oが作成しました。アップストリームのソースコードはkernel.orgにあります。https://git.kernel.org/pub/scm/fs/ext2/e2fsprogsしたがって、このリポジトリはextファイルシステム操作の参照ユーザー領域の実装と見なすことができます。

#!/usr/bin/env bash
set -eu

root_dir=root
img_file=img.ext2

# Create a test directory to convert to ext2.
mkdir -p "$root_dir"
echo asdf > "${root_dir}/qwer"

# Create a 32M ext2 without sudo.
# If 32M is not enough for the contents of the directory,
# it will fail.
rm -f "$img_file"
mke2fs \
  -L '' \
  -N 0 \
  -O ^64bit \
  -d "$root_dir" \
  -m 5 \
  -r 1 \
  -t ext2 \
  "$img_file" \
  32M \
;

# Test the ext2 by mounting it with sudo.
# sudo is only used for testing.
mountpoint=mnt
mkdir -p "$mountpoint"
sudo mount "$img_file" "$mountpoint"
sudo ls -l "$mountpoint"
sudo cmp "${mountpoint}/qwer" "${root_dir}/qwer"
sudo umount "$mountpoint"

GitHubアップストリーム

重要なオプションは、イメージ-dに使用するディレクトリを選択することです。これは、コミットv1.43への比較的新しい追加です。0d4deba22e2aa95ad958b44972dc933fd0ebbc59

したがって、e2fsprogs 1.44.1-1を使用するUbuntu 18.04ではデフォルトで機能しますが、バージョン1.42.13を搭載したUbuntu 16.04では機能しません。

ただし、BuildrootのようにUbuntu 16.04のソースから簡単にコンパイルできます。

git clone git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git
cd e2fsprogs
git checkout v1.44.4
./configure
make -j`nproc`
./misc/mke2fs -h

mke2fs失敗した場合:

__populate_fs: Operation not supported while setting xattrs for "qwer"
mke2fs: Operation not supported while populating file system

オプションを追加するとき:

-E no_copy_xattrs

たとえば、ルートディレクトリがNFSにある場合、またはこれらのファイルシステムとしてextXの代わりにある場合にtmpfs必要です。拡張属性がないようです。

mke2fs通常はにシンボリックリンクされておりmkfs.extXman mke2fsこれらのシンボリックリンクでcall ifを使用する場合、意味は-t暗黙的に使用されます。

これを発見した方法と今後の問題を解決する方法は次のとおりです。ルート構築sudo なし ext2 イメージビルド図からわかるようにだから、私はビルドを実行しV=1、最終的なイメージビルドセクションからコマンドを抽出しました。古いコピー - 貼り付けは決して私を失望させませんでした。

TODO:次の問題を解決する方法を説明してください。

1つのイメージファイルに複数のパーティションがある

確認してください:https://stackoverflow.com/questions/10949169/how-to-create-a-multi-partition-sd-image-without-root-privileges/52850819#52850819

おすすめ記事