diff options
| author | Scott Rifenbark <scott.m.rifenbark@intel.com> | 2013-04-05 06:13:13 -0700 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2013-04-10 16:20:54 +0100 |
| commit | 3ccd6fde214b4514cc5cf68f8020bbcb355581a4 (patch) | |
| tree | 648ab573179bbdd6f4efe91f5c7b87b9281edf24 | |
| parent | 46a05ed934e7b3bbb0c2093d72bdbe7e513ea8a5 (diff) | |
| download | poky-3ccd6fde214b4514cc5cf68f8020bbcb355581a4.tar.gz | |
dev-manual: Changes to the read-only root filesystem section.
Applied the review comments from Paul Eggleton to augment this
section with more information.
Performed a spell check on the entire chapter.
Made the term "postinstall" consistent by defining its first
use in sections a "post-installation (postinstall) script".
(From yocto-docs rev: 179f478777fd02e3fa56d80951ce3eab350fc189)
Signed-off-by: Scott Rifenbark <scott.m.rifenbark@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
| -rw-r--r-- | documentation/dev-manual/dev-manual-common-tasks.xml | 148 |
1 files changed, 118 insertions, 30 deletions
diff --git a/documentation/dev-manual/dev-manual-common-tasks.xml b/documentation/dev-manual/dev-manual-common-tasks.xml index 70ecc2276a..f8b41bf54d 100644 --- a/documentation/dev-manual/dev-manual-common-tasks.xml +++ b/documentation/dev-manual/dev-manual-common-tasks.xml | |||
| @@ -1022,10 +1022,11 @@ | |||
| 1022 | </section> | 1022 | </section> |
| 1023 | 1023 | ||
| 1024 | <section id='usingpoky-extend-addpkg-postinstalls'> | 1024 | <section id='usingpoky-extend-addpkg-postinstalls'> |
| 1025 | <title>Post Install Scripts</title> | 1025 | <title>Post-Installation Scripts</title> |
| 1026 | 1026 | ||
| 1027 | <para> | 1027 | <para> |
| 1028 | To add a post-installation script to a package, add a <filename>pkg_postinst_PACKAGENAME() | 1028 | To add a post-installation (postinstall) script to a package, |
| 1029 | add a <filename>pkg_postinst_PACKAGENAME() | ||
| 1029 | </filename> function to the <filename>.bb</filename> file and use | 1030 | </filename> function to the <filename>.bb</filename> file and use |
| 1030 | <filename>PACKAGENAME</filename> as the name of the package you want to attach to the | 1031 | <filename>PACKAGENAME</filename> as the name of the package you want to attach to the |
| 1031 | <filename>postinst</filename> script. | 1032 | <filename>postinst</filename> script. |
| @@ -1488,7 +1489,7 @@ | |||
| 1488 | These situations almost always exist when a library API | 1489 | These situations almost always exist when a library API |
| 1489 | changes and you have multiple pieces of software that | 1490 | changes and you have multiple pieces of software that |
| 1490 | depend on the separate versions of the library. | 1491 | depend on the separate versions of the library. |
| 1491 | To accomodate these situations, you can install multiple | 1492 | To accommodate these situations, you can install multiple |
| 1492 | versions of the same library in parallel on the same system. | 1493 | versions of the same library in parallel on the same system. |
| 1493 | </para> | 1494 | </para> |
| 1494 | 1495 | ||
| @@ -2297,7 +2298,7 @@ | |||
| 2297 | your own distribution. | 2298 | your own distribution. |
| 2298 | You can use the Yocto Project out-of-the-box to create the | 2299 | You can use the Yocto Project out-of-the-box to create the |
| 2299 | <filename>poky-tiny</filename> distribution. | 2300 | <filename>poky-tiny</filename> distribution. |
| 2300 | Ulitmately, you will want to make changes in your own | 2301 | Ultimately, you will want to make changes in your own |
| 2301 | distribution that are likely modeled after | 2302 | distribution that are likely modeled after |
| 2302 | <filename>poky-tiny</filename>. | 2303 | <filename>poky-tiny</filename>. |
| 2303 | <note> | 2304 | <note> |
| @@ -2870,7 +2871,7 @@ | |||
| 2870 | <para> | 2871 | <para> |
| 2871 | If you have more than one distribution alias, separate them with a space. | 2872 | If you have more than one distribution alias, separate them with a space. |
| 2872 | Note that the build system currently automatically checks the | 2873 | Note that the build system currently automatically checks the |
| 2873 | Fedora, OpenSuSE, Debian, Ubuntu, | 2874 | Fedora, OpenSUSE, Debian, Ubuntu, |
| 2874 | and Mandriva distributions for source package recipes without having to specify them | 2875 | and Mandriva distributions for source package recipes without having to specify them |
| 2875 | using the <filename>DISTRO_PN_ALIAS</filename> variable. | 2876 | using the <filename>DISTRO_PN_ALIAS</filename> variable. |
| 2876 | For example, the following command generates a report that lists the Linux distributions | 2877 | For example, the following command generates a report that lists the Linux distributions |
| @@ -3447,8 +3448,8 @@ | |||
| 3447 | <title>Creating a Read-Only Root Filesystem</title> | 3448 | <title>Creating a Read-Only Root Filesystem</title> |
| 3448 | 3449 | ||
| 3449 | <para> | 3450 | <para> |
| 3450 | Suppose, for security reasons, you need to disable the | 3451 | Suppose, for security reasons, you need to disable |
| 3451 | your target device's root filesystem's write permisions | 3452 | your target device's root filesystem's write permissions |
| 3452 | (i.e. you need a read-only root filesystem). | 3453 | (i.e. you need a read-only root filesystem). |
| 3453 | Or, perhaps you are running the device's operating system | 3454 | Or, perhaps you are running the device's operating system |
| 3454 | from a read-only storage device. | 3455 | from a read-only storage device. |
| @@ -3456,34 +3457,121 @@ | |||
| 3456 | that behavior. | 3457 | that behavior. |
| 3457 | </para> | 3458 | </para> |
| 3458 | 3459 | ||
| 3459 | <para> | 3460 | <note> |
| 3460 | To create a read-only root filesystem, simply add the | 3461 | Supporting a read-only root filesystem requires that the system and |
| 3461 | "read-only-rootfs" feature to your image. | 3462 | applications do not try to write to the root filesystem. |
| 3462 | Using either of the following statements in your | 3463 | If writes are attempted, they need to gracefully fail. |
| 3463 | image recipe or from within the | 3464 | </note> |
| 3464 | <filename>local.conf</filename> file found in the Build | 3465 | |
| 3465 | Directory causes the build system to create a | 3466 | <section id='post-installation-scripts'> |
| 3466 | read-only root filesystem: | 3467 | <title>Post-Installation Scripts</title> |
| 3467 | <literallayout class='monospaced'> | 3468 | |
| 3469 | <para> | ||
| 3470 | It is very important that you make sure all | ||
| 3471 | Post-Installation (postinstall) scripts | ||
| 3472 | for packages that are installed into the image can be run | ||
| 3473 | at the time when the root filesystem is created during the | ||
| 3474 | build on the host system. | ||
| 3475 | These scripts cannot attempt to run during first-boot on the | ||
| 3476 | target device. | ||
| 3477 | With the read-only root filesystem feature enabled, | ||
| 3478 | the build system checks during root filesystem creation to make | ||
| 3479 | sure all postinstall scripts succeed. | ||
| 3480 | If any of these scripts still need to be run after the root | ||
| 3481 | filesystem is created, the build immediately fails. | ||
| 3482 | These checks during build time ensure that the build fails | ||
| 3483 | rather than the target device fails later during its | ||
| 3484 | initial boot operation. | ||
| 3485 | </para> | ||
| 3486 | |||
| 3487 | <para> | ||
| 3488 | Most of the common postinstall scripts generated by the build | ||
| 3489 | system for the out-of-the-box Yocto Project are engineered | ||
| 3490 | so that they can run during root filesystem creation | ||
| 3491 | (e.g. postinstall scripts for caching fonts). | ||
| 3492 | However, if you create and add custom scripts, you need | ||
| 3493 | to be sure they can be run during file system creation. | ||
| 3494 | </para> | ||
| 3495 | |||
| 3496 | <para> | ||
| 3497 | Here are some common problems that prevent postinstall | ||
| 3498 | scripts from running during root filesystem creation: | ||
| 3499 | <itemizedlist> | ||
| 3500 | <listitem><para>Not using | ||
| 3501 | <filename>$</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-D'><filename>D</filename></ulink> | ||
| 3502 | in front of absolute paths. | ||
| 3503 | The build system defines <filename>$D</filename>, and | ||
| 3504 | it is blank when run on the target device. | ||
| 3505 | This implies two purposes for <filename>$D</filename>: | ||
| 3506 | ensuring paths are valid in both the host and target | ||
| 3507 | environments, and checking to determine which | ||
| 3508 | environment is being used as a method for taking | ||
| 3509 | appropriate actions. | ||
| 3510 | </para></listitem> | ||
| 3511 | <listitem><para>Attempting to run processes that are | ||
| 3512 | specific to or dependent on the target | ||
| 3513 | architecture. | ||
| 3514 | You can work around these attempts by using native | ||
| 3515 | tools to accomplish the same processes (tasks), or | ||
| 3516 | by alternatively running the processes under QEMU, | ||
| 3517 | which has the <filename>qemu_run_binary</filename> | ||
| 3518 | function. | ||
| 3519 | For more information, see the | ||
| 3520 | <filename>meta/classes/qemu.bbclass</filename> | ||
| 3521 | class in the | ||
| 3522 | <link linkend='source-directory'>Source Directory</link>. | ||
| 3523 | </para></listitem> | ||
| 3524 | <listitem><para>Using hardware features specific to the machine. | ||
| 3525 | </para></listitem> | ||
| 3526 | </itemizedlist> | ||
| 3527 | </para> | ||
| 3528 | </section> | ||
| 3529 | |||
| 3530 | <section id='areas-with-write-access'> | ||
| 3531 | <title>Areas With Write Access</title> | ||
| 3532 | |||
| 3533 | <para> | ||
| 3534 | With the read-only root filesystem feature enabled, any | ||
| 3535 | attempt by the target to write to the root filesystem at | ||
| 3536 | runtime fails. | ||
| 3537 | Consequently, you must make sure that you configure processes | ||
| 3538 | and applications that attempt these types of writes do so | ||
| 3539 | to directories with write access (i.e. | ||
| 3540 | <filename>/tmp</filename> or <filename>/var/run</filename>). | ||
| 3541 | </para> | ||
| 3542 | </section> | ||
| 3543 | |||
| 3544 | <section id='creating-the-root-filesystem'> | ||
| 3545 | <title>Creating the Root Filesystem</title> | ||
| 3546 | |||
| 3547 | <para> | ||
| 3548 | To create the read-only root filesystem, simply add the | ||
| 3549 | "read-only-rootfs" feature to your image. | ||
| 3550 | Using either of the following statements in your | ||
| 3551 | image recipe or from within the | ||
| 3552 | <filename>local.conf</filename> file found in the | ||
| 3553 | <link linkend='build-directory'>Build Directory</link> | ||
| 3554 | causes the build system to create a read-only root filesystem: | ||
| 3555 | <literallayout class='monospaced'> | ||
| 3468 | IMAGE_FEATURES = "read-only-rootfs" | 3556 | IMAGE_FEATURES = "read-only-rootfs" |
| 3469 | </literallayout> | 3557 | </literallayout> |
| 3470 | or | 3558 | or |
| 3471 | <literallayout class='monospaced'> | 3559 | <literallayout class='monospaced'> |
| 3472 | EXTRA_IMAGE_FEATURES = "read-only-rootfs" | 3560 | EXTRA_IMAGE_FEATURES = "read-only-rootfs" |
| 3473 | </literallayout> | 3561 | </literallayout> |
| 3474 | </para> | 3562 | </para> |
| 3475 | 3563 | ||
| 3476 | <para> | 3564 | <para> |
| 3477 | For more information on how to use these variables, see the | 3565 | For more information on how to use these variables, see the |
| 3478 | "<link linkend='usingpoky-extend-customimage-imagefeatures'>Customizing Images Using Custom <filename>IMAGE_FEATURES</filename> and <filename>EXTRA_IMAGE_FEATURES</filename></link>" | 3566 | "<link linkend='usingpoky-extend-customimage-imagefeatures'>Customizing Images Using Custom <filename>IMAGE_FEATURES</filename> and <filename>EXTRA_IMAGE_FEATURES</filename></link>" |
| 3479 | section. | 3567 | section. |
| 3480 | For information on the variables, see | 3568 | For information on the variables, see |
| 3481 | <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></ulink> | 3569 | <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></ulink> |
| 3482 | and <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_IMAGE_FEATURES'><filename>EXTRA_IMAGE_FEATURES</filename></ulink>. | 3570 | and <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_IMAGE_FEATURES'><filename>EXTRA_IMAGE_FEATURES</filename></ulink>. |
| 3483 | </para> | 3571 | </para> |
| 3572 | </section> | ||
| 3484 | </section> | 3573 | </section> |
| 3485 | 3574 | ||
| 3486 | |||
| 3487 | <section id="platdev-gdb-remotedebug"> | 3575 | <section id="platdev-gdb-remotedebug"> |
| 3488 | <title>Debugging With the GNU Project Debugger (GDB) Remotely</title> | 3576 | <title>Debugging With the GNU Project Debugger (GDB) Remotely</title> |
| 3489 | 3577 | ||
