THIS FORUM POST IS LOCKED, article has been moved here: http://www.haiku-os.org/documents/dev/copying_files_from_and_to_haiku_from_within_linux_using_bfs_shell
This is a small tutorial on how to use the bfs_shell to copy files to and from a Haiku partition or image from within Linux.
Please use caution when you are working with partitions. In short, if you don’t know for sure what you’re doing here, please don’t, unless you have backups of everything and are willing to restore everything.
This tuturial assumes you have completed:
- building_haiku_on_ubuntu_linux_step_by_step
- and optionally, if you are accessing haiku from a partition installing_haiku_to_a_partition_from_linux
With that out of the way, there are two ways to do this:
The quick and dirty way
You can fire up the bfs_shell with jam and the path to the image or partition:sudo jam run ":<build>bfs_shell" /dev/sda57
This will unleash bfs_shell onto a fictitious partition /dev/sda57. Replace this path with the path to your haiku image or haiku partition you set up in the tutorial above. You might need sudo if you're accessing a partition, you can leave it out for an image. You will be greeted with the fssh:/> prompt.
pieter@pieter-laptop:~/develop/haiku/trunk$ sudo jam run ":<build>bfs_shell" /dev/sda57 ...found 675 target(s)... ...updating 1 target(s)... RunCommandLine1 run_0 bfs: mounted "Haiku" (root node at 262144, device = /dev/sda57) fssh:/>To find out what bfs_shell is capable of, type in
help
.
fssh:/> help supported commands: cd - change current directory chmod - change file permissions cp - copy files and directories exit - quit the shell help - list supported commands ln - create a hard or symbolic link ls - list files or directories mkdir - create directories mkindex - create an index query - query for files quit - quit the shell rm - remove files and directories sync - syncs the file systemPretty much the only thing this does not explain, is that paths on Linux should be preceded with a
:
.
So let's try to browse around a bit.
fssh:/> ls .: drwxrwxrwx 0 0 0 2008-07-12 09:53:21 . drwxrwxrwx 0 0 0 2008-07-12 09:53:21 .. drwxr-xr-x 0 0 2048 2008-07-12 09:10:56 myfs fssh:/> ls myfs .: drwxr-xr-x 0 0 2048 2008-07-12 09:10:56 . drwxrwxrwx 0 0 0 2008-07-12 09:53:21 .. drwxr-xr-x 0 0 2048 2008-07-12 11:13:53 apps drwxr-xr-x 0 0 2048 2008-07-12 09:10:57 beos drwxr-xr-x 0 0 2048 2008-07-12 09:10:57 common drwxr-xr-x 0 0 2048 2008-07-12 11:13:53 develop drwxr-xr-x 0 0 2048 2008-07-12 09:10:57 home drwxr-xr-x 0 0 2048 2008-07-12 09:10:57 optional drwxr-xr-x 0 0 2048 2008-07-12 11:13:53 preferences drwxr-xr-x 0 0 2048 2008-07-12 09:10:57 var fssh:/> ls myfs/home/config/settings myfs/home/config/settings: drwxr-xr-x 0 0 2048 2008-07-12 09:10:57 . drwxr-xr-x 0 0 2048 2008-07-12 09:10:57 .. -rw-r--r-- 0 0 474 2008-07-12 11:43:47 Archive.zip drwxrwxrwx 0 0 2048 2008-07-12 11:16:59 Cortex -rw-r--r-- 0 0 8 2008-07-12 11:13:52 Deskbar_security_code -rw-r--r-- 0 0 43 2008-07-12 11:45:42 Deskbar_settings -rw-r--r-- 0 0 28 2008-07-12 11:44:08 DiskProbe_data -rw-r--r-- 0 0 233 2008-07-12 11:24:08 DriveSetup -rw-r--r-- 0 0 31 2008-07-12 11:44:19 Expander_Settings -rw-r--r-- 0 0 50 2008-07-12 11:37:32 Font_Settings -rw-r--r-- 0 0 7691 2008-07-12 11:13:51 Key_map ---------- 0 0 35 2008-07-12 11:37:32 Magnify_prefs drwxr-xr-x 0 0 2048 2008-07-12 11:24:17 Media -rw-r--r-- 0 0 44 2008-07-12 11:16:42 MediaPrefs Settings -rw-r--r-- 0 0 44 2008-07-12 11:32:15 Mouse_settings -rw-r--r-- 0 0 8 2008-07-12 11:35:19 Screen_data drwxr-xr-x 0 0 2048 2008-07-12 11:13:53 Tracker -rw-r--r-- 0 0 8 2008-07-12 11:17:16 VM_data -rw-r--r-- 0 0 55 2008-07-12 11:43:47 ZipOMatic.msg drwxr-xr-x 0 0 2048 2008-07-12 09:11:28 beos_mime drwxr-xr-x 0 0 2048 2008-07-12 09:10:57 kernel -rw-r--r-- 0 0 119 2008-07-12 11:45:43 print_server_settings drwxr-xr-x 0 0 2048 2008-07-12 09:10:58 printers drwxr-xr-x 0 0 2048 2008-07-12 11:13:50 system -rw------- 0 0 1 2008-07-12 11:38:01 time_dststatus -rw-r--r-- 0 0 59 2008-07-12 11:45:42 x-vnd.Haiku-desklinkNow I'll copy a file I created in Haiku (
/haiku/home/config/settings/Archive.zip
) to Linux.
fssh:/> cp myfs/home/config/settings/Archive.zip :/home/pieterThe cp command copied source file
myfs/home/config/settings/Archive.zip
to destination path :/home/pieter
.
You can also copy something in the other direction. When you're done, type exit
.
fssh:/> exit ...updated 1 target(s)...
The Profile Way
If I understand correctly, build profiles allow you to have different, well, build profiles. You can define a few and simply typejam -q @<profile_name>
to compile that profile. When you've created build profiles, you will want to build Haiku this way now.
Seems pretty useful to me, saves you a lot of modifying the UserBuildConfig if you have a lot of different images/partitions to build haiku on. If someone has more details on this, please let me know and I'll incorporate it here.
- Read the trunk/build/jam/UserBuildConfig.ReadMe. It has some useful things explained.
- Set up build profiles: Copy the Build Profiles section from the UserBuildConfig.ReadMe to UserBuildConfig. They should both be located in trunk/build/jam. If you don't have a UserBuildConfig yet, create one first.
-
Use the
jam -q @<profile_name> mount
to start bfs_shell on a profile (pick the profile that applies to you, for me it isjam -q @disk mount
). Again, you might need sudo for partitions, and you won't need it for images. If you previously had set up the UserBuildConfig from the tutorial linked above, you may want to move the usual lines you had and place them in the rightcase "<profile_name>" : {
section of the UserBuildConfig. -
So after you've typed
sudo jam -q @disk mount
, you will be greeted by the fssh:/> prompt.pieter@pieter-laptop:~/develop/haiku/trunk$ sudo jam -q @disk mount ...found 675 target(s)... ...updating 1 target(s)... RunCommandLine1 run_0 bfs: mounted "Haiku" (root node at 262144, device = /dev/sda57) fssh:/>
Now you work with the same commands as with the quick and dirty way. Start withhelp
.
I hope this was useful, please let me know if you have any feedback.