Eric Andersen | 6fd8c66 | 2001-02-13 20:04:30 +0000 | [diff] [blame] | 1 | /* vi: set sw=4 ts=4: */ |
| 2 | /* |
| 3 | * pivot_root.c - Change root file system. Based on util-linux 2.10s |
| 4 | * |
| 5 | * busyboxed by Evin Robertson |
Eric Andersen | d160a27 | 2001-02-24 19:17:07 +0000 | [diff] [blame] | 6 | * pivot_root syscall stubbed by Erik Andersen, so it will compile |
Eric Andersen | c7bda1c | 2004-03-15 08:29:22 +0000 | [diff] [blame] | 7 | * regardless of the kernel being used. |
Bernhard Reutner-Fischer | b1629b1 | 2006-05-19 19:29:19 +0000 | [diff] [blame] | 8 | * |
Denys Vlasenko | 0ef64bd | 2010-08-16 20:14:46 +0200 | [diff] [blame] | 9 | * Licensed under GPLv2, see file LICENSE in this source tree. |
Eric Andersen | 6fd8c66 | 2001-02-13 20:04:30 +0000 | [diff] [blame] | 10 | */ |
Denys Vlasenko | dd898c9 | 2016-11-23 11:46:32 +0100 | [diff] [blame] | 11 | //config:config PIVOT_ROOT |
Denys Vlasenko | b097a84 | 2018-12-28 03:20:17 +0100 | [diff] [blame] | 12 | //config: bool "pivot_root (1.1 kb)" |
Denys Vlasenko | dd898c9 | 2016-11-23 11:46:32 +0100 | [diff] [blame] | 13 | //config: default y |
| 14 | //config: select PLATFORM_LINUX |
| 15 | //config: help |
Denys Vlasenko | 72089cf | 2017-07-21 09:50:55 +0200 | [diff] [blame] | 16 | //config: The pivot_root utility swaps the mount points for the root filesystem |
| 17 | //config: with some other mounted filesystem. This allows you to do all sorts |
| 18 | //config: of wild and crazy things with your Linux system and is far more |
| 19 | //config: powerful than 'chroot'. |
Denys Vlasenko | dd898c9 | 2016-11-23 11:46:32 +0100 | [diff] [blame] | 20 | //config: |
Denys Vlasenko | 72089cf | 2017-07-21 09:50:55 +0200 | [diff] [blame] | 21 | //config: Note: This is for initrd in linux 2.4. Under initramfs (introduced |
| 22 | //config: in linux 2.6) use switch_root instead. |
Denys Vlasenko | dd898c9 | 2016-11-23 11:46:32 +0100 | [diff] [blame] | 23 | |
Denys Vlasenko | fdb9235 | 2017-08-05 01:51:12 +0200 | [diff] [blame] | 24 | //applet:IF_PIVOT_ROOT(APPLET_NOFORK(pivot_root, pivot_root, BB_DIR_SBIN, BB_SUID_DROP, pivot_root)) |
Denys Vlasenko | dd898c9 | 2016-11-23 11:46:32 +0100 | [diff] [blame] | 25 | |
| 26 | //kbuild:lib-$(CONFIG_PIVOT_ROOT) += pivot_root.o |
Pere Orga | 5bc8c00 | 2011-04-11 03:29:49 +0200 | [diff] [blame] | 27 | |
| 28 | //usage:#define pivot_root_trivial_usage |
| 29 | //usage: "NEW_ROOT PUT_OLD" |
| 30 | //usage:#define pivot_root_full_usage "\n\n" |
| 31 | //usage: "Move the current root file system to PUT_OLD and make NEW_ROOT\n" |
| 32 | //usage: "the new root file system" |
| 33 | |
Denis Vlasenko | b6adbf1 | 2007-05-26 19:00:18 +0000 | [diff] [blame] | 34 | #include "libbb.h" |
Eric Andersen | 6fd8c66 | 2001-02-13 20:04:30 +0000 | [diff] [blame] | 35 | |
Denys Vlasenko | fdb9235 | 2017-08-05 01:51:12 +0200 | [diff] [blame] | 36 | extern int pivot_root(const char *new_root, const char *put_old); |
Eric Andersen | 6fd8c66 | 2001-02-13 20:04:30 +0000 | [diff] [blame] | 37 | |
Denis Vlasenko | 9b49a5e | 2007-10-11 10:05:36 +0000 | [diff] [blame] | 38 | int pivot_root_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
Eric Andersen | 6fd8c66 | 2001-02-13 20:04:30 +0000 | [diff] [blame] | 39 | int pivot_root_main(int argc, char **argv) |
| 40 | { |
Denis Vlasenko | 5983914 | 2006-09-10 18:26:51 +0000 | [diff] [blame] | 41 | if (argc != 3) |
| 42 | bb_show_usage(); |
Eric Andersen | 6fd8c66 | 2001-02-13 20:04:30 +0000 | [diff] [blame] | 43 | |
Denys Vlasenko | fdb9235 | 2017-08-05 01:51:12 +0200 | [diff] [blame] | 44 | /* NOFORK applet. Hardly matters wrt performance, but code is trivial */ |
| 45 | |
Denis Vlasenko | f885c54 | 2007-02-06 00:35:36 +0000 | [diff] [blame] | 46 | if (pivot_root(argv[1], argv[2]) < 0) { |
| 47 | /* prints "pivot_root: <strerror text>" */ |
| 48 | bb_perror_nomsg_and_die(); |
| 49 | } |
Eric Andersen | 6fd8c66 | 2001-02-13 20:04:30 +0000 | [diff] [blame] | 50 | |
Denis Vlasenko | 5983914 | 2006-09-10 18:26:51 +0000 | [diff] [blame] | 51 | return EXIT_SUCCESS; |
Eric Andersen | 6fd8c66 | 2001-02-13 20:04:30 +0000 | [diff] [blame] | 52 | } |