blob: 9bdae506cffed8615fdaf424fe1a0379477e3492
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 |
6 | * pivot_root syscall stubbed by Erik Andersen, so it will compile |
7 | * regardless of the kernel being used. |
8 | * |
9 | * Licensed under GPLv2, see file LICENSE in this source tree. |
10 | */ |
11 | //config:config PIVOT_ROOT |
12 | //config: bool "pivot_root" |
13 | //config: default y |
14 | //config: select PLATFORM_LINUX |
15 | //config: help |
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'. |
20 | //config: |
21 | //config: Note: This is for initrd in linux 2.4. Under initramfs (introduced |
22 | //config: in linux 2.6) use switch_root instead. |
23 | |
24 | //applet:IF_PIVOT_ROOT(APPLET(pivot_root, BB_DIR_SBIN, BB_SUID_DROP)) |
25 | |
26 | //kbuild:lib-$(CONFIG_PIVOT_ROOT) += pivot_root.o |
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 | |
34 | #include "libbb.h" |
35 | |
36 | extern int pivot_root(const char * new_root,const char * put_old); |
37 | |
38 | int pivot_root_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
39 | int pivot_root_main(int argc, char **argv) |
40 | { |
41 | if (argc != 3) |
42 | bb_show_usage(); |
43 | |
44 | if (pivot_root(argv[1], argv[2]) < 0) { |
45 | /* prints "pivot_root: <strerror text>" */ |
46 | bb_perror_nomsg_and_die(); |
47 | } |
48 | |
49 | return EXIT_SUCCESS; |
50 | } |
51 |