Core OS Index

2.1. Kernel Linux

Linux is a monolith kernel, a big one ! Visit Linux Libre and Linux Non-Libre pages for more links and information.

2.1.1. Port Linux Libre

Default crux configuration can be obtained from iso, kernel port depends on dracut and grub but is not required to install them. To build and install this port using prt-get;

        $ prt-get depinst linux-libre
        

2.1.2. Manual Install

Download Linux Source from linux libre, or using the port system;

Crux iso comes with config that is more generic than used on linux-libre port, crux default is a good starting point to personalize according to your needs (build default, detect modules needed);

        $ mkdir ~/kernel
        $ cd ~/kernel
        $ tar xf /usr/ports/distfiles/linux-libre-4.9.12-grsec.tar.xz
        $ cd linux-4.9.12/
        

Grsecurity patch for 4.9.12. Gcc graysky2 kernel_gcc_patch (master.zip) that adds more cpu options (FLAGS native). Check Pkgfile for instructions and more patches used on linux-libre port. Read patching your kernel with gresecurity.

Apply grsecurity patch;

        $ patch -p1 < ../grsecurity-3.1-4.9.12-201702231830.patch
        

Set correct version;

        $ rm localversion-grsec
        

Edit Makefile and replace EXTRAVERSION;

        VERSION = 4
        PATCHLEVEL = 9
        SUBLEVEL = 12
        EXTRAVERSION = -grsec
        NAME = Roaring Lionus
        

Change cpu optimization patch;

        depends on (MK8 || MK7 || MCORE2 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MVIAC3_2 || MVIAC7 || MCRUSOE || MEFFICEON || X86_64 || MATOM || MGEODE_LX)
        

to;

        depends on (MK8 || MK7 || MCORE2 || MPSC || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MVIAC3_2 || MVIAC7 || MCRUSOE || MEFFICEON || X86_64 || MATOM || MGEODE_LX)
        

Apply additional cpu optimizations patch;

        $ patch -p1 < ../enable_additional_cpu_optimizations_for_gcc_v4.9%2B_kernel_v3.15%2B.patch
        

Configure kernel according to your current kernel hardware support;

        $ make localmodconfig
        

Get information about your hardware, for example information about which graphic module (driver) is in use as root run;

        # lspci -nnk | grep -i vga -A3 | grep 'in use'
        Kernel driver in use: i915
        

Before start compiling check configuration;

        $ make nconfig
        

Make targets;

        $ make help
        Cleaning targets:
          clean           - Remove most generated files but keep the config and
                            enough build support to build external modules
          mrproper        - Remove all generated files + config + various backup files
          distclean       - mrproper + remove editor backup and patch files

        Configuration targets:
          config          - Update current config utilising a line-oriented program
          nconfig         - Update current config utilising a ncurses menu based
                            program
          menuconfig      - Update current config utilising a menu based program
          xconfig         - Update current config utilising a Qt based front-end
          gconfig         - Update current config utilising a GTK+ based front-end
          oldconfig       - Update current config utilising a provided .config as base
          localmodconfig  - Update current config disabling modules not loaded
          localyesconfig  - Update current config converting local mods to core
          silentoldconfig - Same as oldconfig, but quietly, additionally update deps
          defconfig       - New config with default from ARCH supplied defconfig
          savedefconfig   - Save current config as ./defconfig (minimal config)
          allnoconfig     - New config where all options are answered with no
          allyesconfig    - New config where all options are accepted with yes
          allmodconfig    - New config selecting modules when possible
          alldefconfig    - New config with all symbols set to default
          randconfig      - New config with random answer to all options
          listnewconfig   - List new options
          olddefconfig    - Same as silentoldconfig but sets new symbols to their
                            default value
          kvmconfig       - Enable additional options for kvm guest kernel support
          xenconfig       - Enable additional options for xen dom0 and guest kernel support
          tinyconfig      - Configure the tiniest possible kernel

        Other generic targets:
          all             - Build all targets marked with [*]
        * vmlinux         - Build the bare kernel
        * modules         - Build all modules
          modules_install - Install all modules to INSTALL_MOD_PATH (default: /)
          firmware_install- Install all firmware to INSTALL_FW_PATH
                            (default: $(INSTALL_MOD_PATH)/lib/firmware)
          dir/            - Build all files in dir and below
          dir/file.[ois]  - Build specified target only
          dir/file.lst    - Build specified mixed source/assembly target only
                            (requires a recent binutils and recent build (System.map))
          dir/file.ko     - Build module including final link
          modules_prepare - Set up for building external modules
          tags/TAGS       - Generate tags file for editors
          cscope          - Generate cscope index
          gtags           - Generate GNU GLOBAL index
          kernelrelease   - Output the release version string (use with make -s)
          kernelversion   - Output the version stored in Makefile (use with make -s)
          image_name      - Output the image name (use with make -s)
          headers_install - Install sanitised kernel headers to INSTALL_HDR_PATH
                            (default: ./usr)

        Static analysers
          checkstack      - Generate a list of stack hogs
          namespacecheck  - Name space analysis on compiled kernel
          versioncheck    - Sanity check on version.h usage
          includecheck    - Check for duplicate included header files
          export_report   - List the usages of all exported symbols
          headers_check   - Sanity check on exported headers
          headerdep       - Detect inclusion cycles in headers
          coccicheck      - Check with Coccinelle.

        Kernel selftest
          kselftest       - Build and run kernel selftest (run as root)
                            Build, install, and boot kernel before
                            running kselftest on it
          kselftest-clean - Remove all generated kselftest files
          kselftest-merge - Merge all the config dependencies of kselftest to existed
                            .config.

        Kernel packaging:
          rpm-pkg             - Build both source and binary RPM kernel packages
          binrpm-pkg          - Build only the binary kernel RPM package
          deb-pkg             - Build both source and binary deb kernel packages
          bindeb-pkg          - Build only the binary kernel deb package
          tar-pkg             - Build the kernel as an uncompressed tarball
          targz-pkg           - Build the kernel as a gzip compressed tarball
          tarbz2-pkg          - Build the kernel as a bzip2 compressed tarball
          tarxz-pkg           - Build the kernel as a xz compressed tarball
          perf-tar-src-pkg    - Build perf-4.9.9-gnu.tar source tarball
          perf-targz-src-pkg  - Build perf-4.9.9-gnu.tar.gz source tarball
          perf-tarbz2-src-pkg - Build perf-4.9.9-gnu.tar.bz2 source tarball
          perf-tarxz-src-pkg  - Build perf-4.9.9-gnu.tar.xz source tarball

        Documentation targets:
         Linux kernel internal documentation in different formats (Sphinx):
          htmldocs        - HTML
          latexdocs       - LaTeX
          pdfdocs         - PDF
          epubdocs        - EPUB
          xmldocs         - XML
          cleandocs       - clean all generated files

          make SPHINXDIRS="s1 s2" [target] Generate only docs of folder s1, s2
          valid values for SPHINXDIRS are: development-process media gpu 80211

          make SPHINX_CONF={conf-file} [target] use *additional* sphinx-build
          configuration. This is e.g. useful to build with nit-picking config.

         Linux kernel internal documentation in different formats (DocBook):
          htmldocs        - HTML
          pdfdocs         - PDF
          psdocs          - Postscript
          xmldocs         - XML DocBook
          mandocs         - man pages
          installmandocs  - install man pages generated by mandocs
          cleandocs       - clean all generated DocBook files

          make DOCBOOKS="s1.xml s2.xml" [target] Generate only docs s1.xml s2.xml
          valid values for DOCBOOKS are: z8530book.xml kernel-hacking.xml kernel-locking.xml deviceiobook.xml writing_usb_driver.xml networking.xml kernel-api.xml filesystems.xml lsm.xml usb.xml kgdb.xml gadget.xml libata.xml mtdnand.xml librs.xml rapidio.xml genericirq.xml s390-drivers.xml uio-howto.xml scsi.xml debugobjects.xml sh.xml regulator.xml alsa-driver-api.xml writing-an-alsa-driver.xml tracepoint.xml w1.xml writing_musb_glue_layer.xml crypto-API.xml iio.xml

          make DOCBOOKS="" [target] Don't generate docs from Docbook
             This is useful to generate only the ReST docs (Sphinx)

        Architecture specific targets (x86):
        * bzImage      - Compressed kernel image (arch/x86/boot/bzImage)
          install      - Install kernel using
                          (your) ~/bin/installkernel or
                          (distribution) /sbin/installkernel or
                          install to $(INSTALL_PATH) and run lilo
          fdimage      - Create 1.4MB boot floppy image (arch/x86/boot/fdimage)
          fdimage144   - Create 1.4MB boot floppy image (arch/x86/boot/fdimage)
          fdimage288   - Create 2.8MB boot floppy image (arch/x86/boot/fdimage)
          isoimage     - Create a boot CD-ROM image (arch/x86/boot/image.iso)
                          bzdisk/fdimage*/isoimage also accept:
                          FDARGS="..."  arguments for the booted kernel
                          FDINITRD=file initrd for the booted kernel

          i386_defconfig           - Build for i386
          x86_64_defconfig         - Build for x86_64

          make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build
          make V=2   [targets] 2 => give reason for rebuild of target
          make O=dir [targets] Locate all output files in "dir", including .config
          make C=1   [targets] Check all c source with $CHECK (sparse by default)
          make C=2   [targets] Force check of all c source with $CHECK
          make RECORDMCOUNT_WARN=1 [targets] Warn about ignored mcount sections
          make W=n   [targets] Enable extra gcc checks, n=1,2,3 where
                        1: warnings which may be relevant and do not occur too often
                        2: warnings which occur quite often but may still be relevant
                        3: more obscure warnings, can most likely be ignored
                        Multiple levels can be combined with W=12 or W=123

        Execute "make" or "make all" to build all targets marked with [*]
        For further info see the ./README file
        $
        
        $ make -j $(nproc) bzImage modules
        $ sudo make modules_install
        $ sudo cp arch/x86/boot/bzImage /boot/vmlinuz-4.9.12-grsec
        $ sudo cp System.map /boot/System.map-4.9.12-grsec
        

Update grub;

        # grub-mkconfig -o /boot/grub/grub.cfg
        

2.1.3. Manual Remove

        $ sudo rm -r /lib/modules/4.9.12-grsec
        $ sudo rm /boot/vmlinuz-4.9.12-grsec
        $ sudo rm /boot/System.map-4.9.12-grsec
        

2.1.4. Dracut

Install dracut;

        # cd /usr/ports/c9-ports/dracut
        # pkgmk -d
        # pkgadd /usr/ports/packages/dracut#044-2.pkg.tar.gz
        

Review configuration file;

        # PUT YOUR CONFIG IN separate files
        # in /etc/dracut.conf.d named ".conf"

        # Equivalent to -H
        hostonly="yes"

        # Mount / and /usr read-only by default.
        ro_mnt="no"

        # Equivalent to -m "module module module"
        dracutmodules+="dash kernel-modules rootfs-block udev-rules usrmount base fs-lib shutdown"

        # Equivalent to -a "module"
        add_dracutmodules+="caps debug"

        # Equivalent to -o "module"
        #omit_dracutmodules+="systemd systemd-bootchart systemd-networkd systemd-initrd"

        # SEE man dracut.conf(5) for options
        

Run dracut to create init ram filesystem for port linux-blob kernel;

        # dracut -v /boot/initramfs-4.9.11-blob.img 4.9.11-blob
        
Core OS Index

This is part of the c9-doc Manual. Copyright (C) 2017 c9 team. See the file Gnu Free Documentation License for copying conditions.