Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Version Control soft that will keep ALL files and their metadata from POSIX FS (ext3/ext4)

THE SCENARIO

I'm developing a Root FS for some embedded Linux device. It is sitting on the host, exported via NFS and my development board mounts is under "/". The workflows that I need are: - to share my FS to other developers(they have with their own dev. boards) - to backup my Root FS onto some "server" - to deploy my Root FS onto flash-disks or other media - track changes in specific files in my Root FS, branching&merging,roll back etc.

Guys, this seems to me as a Version Control scenario, and I even use git.

THE PROBLEM

As you know Git(and svn/mercurial/bazaar too !) 1) does not store special files (device files under /dev etc.) 2) does not store file owners and permissions. I want to store everything and AS IS.

THE QUESTION:

Do you know some VCS that will do the job ? Or may be you know about another (but simple) solution for doing my scenarios ?

IS IT A COMMON PROBLEM...

I believe that it is, because till now I've heard about scripts/hooks/custom soft that everybody(!) works out for his purposes. All I need is an all-eating-VSS

Thank you !!

like image 477
LiMar Avatar asked Oct 06 '10 11:10

LiMar


4 Answers

Having done something similar (developing firmware for an embedded Linux OS), I've found that it's better to put device file creation into a script called by your build system, rather than to store device files directly on the development machine. Then the script that creates the files goes into version control, instead of the files themselves, and (BONUS) you don't need to be root to modify them. Run the build through fakeroot instead.

I suppose this doesn't directly answer your question, but it may be worth thinking about revising your development model. It's NEVER a good idea to run your build as root, because what happens if you accidentally have a "/" in front of a common path? You may inadvertently replace /bin with a whole bunch of links to busybox built for a different architecture.

like image 86
Jonathan Avatar answered Nov 16 '22 06:11

Jonathan


This is the tool for you:

http://fsvs.tigris.org/

it has svn backend.

like image 32
FranZ Avatar answered Nov 16 '22 05:11

FranZ


I know this seems a little obvious, but as you haven't mentioned it: Have you considered mechanisms to put all your special files into a regular file, like, for example, into a tar archive? You could store that just fine with any version control system, and as filesystems have lots of binary data anyway diffs between two revisions of a full root filesystem aren't that useful anyway, so you might even not lose too many of the features your version control system provides.

like image 2
rafl Avatar answered Nov 16 '22 04:11

rafl


initramfs is a good answer to the userid groupid, permissioon problem. In your kernel source directory, there is scripts/gen_initramfs_list.sh.
This script allows you to build an initramfs archive from several sources. You can for example, specify :

  • a directory : The files and directory found in this base directory will be at the root of your file system.

  • a file liste : it is a text file, very useful to create directory, files and special device files. See example below

If you develop as non root, and your rootfs is in rootfsdir, then probably the file in rootfsdir are owned by you. gen_initramfs_list can translate your uid, gid into 0, 0. Here is an exemple command line :

gen_initramfs_list -u $MYUID -o initramfs.gz rootfsdir/ device.txt 

Where device.txt contains :

# This is a very simple, default initramfs

dir /dev 0755 0 0
nod /dev/console 0600 0 0 c 5 1
dir /root 0700 0 0
# file /kinit usr/kinit/kinit 0755 0 0
# slink /init kinit 0755 0 0

Then you can use standard version control for your rootfsdir content, and add the device.txt file under version control, and here you are : content and file attribute are versionned :).

I don't know if you can change the permission and uid/gid of a file in a directory source via a filelist source, but this would be a logical feature.
Of course you can start with minimal root fs, from which you mount your existing nfs_export.

It is a common problem, and gen_initramfs_list is the tool to solve it.

like image 2
shodanex Avatar answered Nov 16 '22 04:11

shodanex