# NanoBSD compilation  complete but missing file.



## driker (Nov 23, 2022)

So I ran the NanoBSD build script without any errors being printed.  It returned me to the command line but when I attempted to dd the "_.disk.full" file I noticed that it wasn't created.  Does anyone know if I did anything wrong?  I did not change anything in the script itself or add any custom configurations.  I'm unsure if maybe the documentation is out of date, if it just doesn't print errors if there are any or what else could be wrong.

Any suggestions or information would be greatly appreciated.


----------



## Alain De Vos (Nov 24, 2022)

Which git repo did you use ?


----------



## BSDoneLove (Nov 24, 2022)

Did you try with that manual? https://docs.freebsd.org/en/articles/nanobsd/
or with smth else?


----------



## Phishfry (Nov 24, 2022)

driker said:


> Does anyone know if I did anything wrong?


NanoBSD building has excellent logging. Each phase creates a logfile of the commands ran by the script.
Look at the parent directory of your disk images.
Look for files which end in two letters.
They are your guide.
For example in the disk image phase the log file will be {NANOBSD _BUILD_NAME}.*di*
So look back through the logs. That is my advice.


----------



## Phishfry (Nov 24, 2022)

I do wonder if you are using the right image file.
By default NanoBSD creates two main disk images. Known as ping-pong partition scheme.
It allows you to update one while keeping a backup.

So disk image names can be confusing.
My  suggestion if you are new to NanoBSD is to use mdconfig(8) to load your images.
Study the disk structures with gpart show md0


----------



## Phishfry (Nov 24, 2022)

Sorry I was wrong about the log names.
The {NANOBSD_BUILD_NAME} was wrong.
The log files look like this:
_.di <build disk image>
_.dl
_.etc <read make.conf>
_.ik <install kernel>
_.iw <install world>

These may not all be present if the build fails.
Sort by date to see the logs in cronological order.


----------



## Phishfry (Nov 24, 2022)

driker said:


> dd the "_.disk.full" file I noticed that it wasn't created.


I do want to mention the build files end up in another directory.
Unless changed it uses /usr/obj/ as root directory of build.
MAKEOBJDIRPREFIX="/usr/obj/nanobsd.full"


----------



## Phishfry (Nov 25, 2022)

I just built NanoBSD on FreeBSD 13.1-RELEASE.
With stock `nanobsd.sh` the image size is not big enough. It stalls with this warning.

```
02:06:48 ## build code slice
02:06:48 ### log: /usr/obj/nanobsd.full/_.cs
/usr/obj/nanobsd.full/_.mnt: write failed, filesystem is full
```
Filesystem of build is full.
So I created an config file amd64.conf with one line:

```
NANO_MEDIASIZE=12500000
```
Rebuild for sucessful image creation.
`./nanobsd.sh -bw -c amd64.conf`
Note the -bw flags. They preserve buildworld and buildkernel so you can tune your image size.

I am not sure why the build is so large. I usually refine my build.
So far I have only built NanoBSD for Beaglebone on FreeBSD 13. It was a 500MB image versus _.disk_full is 6.4GB
I am confident you could slim this.


----------



## Phishfry (Nov 25, 2022)

Load the image file to see what it built:
`mdconfig /usr/obj/nanobsd.full/_.disk.full`
md0

Now investigate:
`gpart show -p md0`

```
=>      63  12499937    md0  MBR  (6.0G)
        63   6247521  md0s1  freebsd  [active]  (3.0G)
   6247584        63         - free -  (32K)
   6247647   6247521  md0s2  freebsd  (3.0G)
  12495168      3024  md0s3  freebsd  (1.5M)
  12498192      1808         - free -  (904K)
```

Drill down on the slices:

`gpart show -p md0s1`

```
=>      0  6247521   md0s1  BSD  (3.0G)
        0       16          - free -  (8.0K)
       16  6247505  md0s1a  !0  (3.0G)
```

So we have two 3GB ping pong partitions.

`mount /dev/md0s1a /mnt`
`ls /mnt`

```
.cshrc        bin        dev        media        rescue        usr
.profile      boot        etc        mnt        root        var
.snap          cfg        lib        net        sbin
COPYRIGHT    conf        libexec        proc        tmp
```
`umount /mnt`
`mdconfig -du md0`


----------



## driker (Nov 25, 2022)

I'm really sorry for the long response time.  Had to go away for a day due to the holiday and then had to work much earlier than expected.  



Alain De Vos said:


> Which git repo did you use ?


I used the source that is installed when first installing FreeBSD.



BSDoneLove said:


> Did you try with that manual? https://docs.freebsd.org/en/articles/nanobsd/
> or with smth else?


Yes, I used that.  I didn't change anything.  Just typed in the commands to build the image.  (cd into directory, use the stock shell command, etc.)



Phishfry said:


> ./nanobsd.sh -bw -c amd64.conf


I did not add the "-bw -c amd64.conf" part.  I will try with that.  I wonder if not including that would have been my issue.


----------



## Phishfry (Nov 26, 2022)

driker said:


> I did not add the "-bw -c amd64.conf" part. I will try with that. I wonder if not including that would have been my issue.


Yes it is the problem. FreeBSD 13.1 will not work with the instructions provided.

You have to create a configuration file if I was unclear. This command will create the file.
`ee /usr/src/tools/tools/nanobsd/amd.conf`

Add a single line:
NANO_MEDIASIZE=12500000

amd.conf is just a symbolic name I have chosen. You can name it anything you like.
You have to pass the config file name you chose with the -c option flag as I have shown.


----------



## driker (Nov 26, 2022)

Sorry, didn't see your reply before this message.  I'll try that now and report back.  Thank you.


----------



## driker (Nov 26, 2022)

Finally figured it out.  Had to let it run overnight, building takes  a while on my x270, after scrolling through something like 30k lines of kernel build logs I get to the errors.  Seems like I have 8 errors and it seems to go downhill when it reaches kern_procctl.c.  Specifically struct vmspace *vm (unused variable) and vm_map_t map (unused variable).  I'm going to look into solutions to this on my breaks at work and see if I can figure it out.


----------



## W.hâ/t (Nov 26, 2022)

If this is the only error type you get, you can build try to build with 'WITHOUT_WERROR=' or with 'WARNS=3'


----------



## driker (Nov 26, 2022)

Thank you.  I'll try giving that a go when I make it home and report back.


----------



## driker (Nov 27, 2022)

W.hâ/t said:


> If this is the only error type you get, you can build try to build with 'WITHOUT_WERROR=' or with 'WARNS=3'


I attempted these configuration changes.  Adding them to my custom configuration.  I am still showing errors when it comes to the kern_procctl.c file relating to struct space *vm.  Stating that it is an unused variable.  Then later on it states vm is an undeclared identifier.  I've been doing some research and it seems like this is a unique issue as I cannot find any examples of it.


----------



## W.hâ/t (Nov 27, 2022)

Yes i thought it might do that. Can you compile the kernel with `buildkernel` ?
If so try running the script with the `-k` option.
If not post the error messages and your modified config files for the kernel.


----------



## Phishfry (Nov 27, 2022)

driker said:


> Then later on it states


You are mis-reading something here.
When a build fails it halts. There is no 'later on'.
Perhaps you are confusing Warnings with Errors?


----------



## driker (Nov 27, 2022)

W.hâ/t said:


> Yes i thought it might do that. Can you compile the kernel with `buildkernel` ?
> If so try running the script with the `-k` option.
> If not post the error messages and your modified config files for the kernel.



I'll attempt to build it now.  



Phishfry said:


> You are mis-reading something here.
> When a build fails it halts. There is no 'later on'.
> Perhaps you are confusing Warnings with Errors?


No, they are definitely errors.  It says at the bottom of the log that it had 8 errors.  I am attaching photos of the errors from the log that I've pulled up in ee.


----------



## Phishfry (Nov 27, 2022)

What version of FreeBSD are you using for this build?

How did you install your source tree?

It built fine on my machine:

# `cat _.bk | grep /usr/src/sys/kern/kern_proc.c`

```
cc -target x86_64-unknown-freebsd13.1 --sysroot=/usr/obj/nanobsd.full/usr/src/amd64.amd64/tmp -B/usr/obj/nanobsd.full/usr/src/amd64.amd64/tmp/usr/bin -c -O2 -pipe  -fno-strict-aliasing  -g -nostdinc  -I. -I/usr/src/sys -I/usr/src/sys/contrib/ck/include -I/usr/src/sys/contrib/libfdt -D_KERNEL -DHAVE_KERNEL_OPTION_HEADERS -include opt_global.h -fno-common    -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -MD  -MF.depend.kern_proc.o -MTkern_proc.o -fdebug-prefix-map=./machine=/usr/src/sys/amd64/include -fdebug-prefix-map=./x86=/usr/src/sys/x86/include -mcmodel=kernel -mno-red-zone -mno-mmx -mno-sse -msoft-float  -fno-asynchronous-unwind-tables -ffreestanding -fwrapv -fstack-protector -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wcast-qual -Wundef -Wno-pointer-sign -D__printf__=__freebsd_kprintf__ -Wmissing-include-dirs -fdiagnostics-show-option -Wno-unknown-pragmas -Wno-error=tautological-compare -Wno-error=empty-body -Wno-error=parentheses-equality -Wno-error=unused-function -Wno-error=pointer-sign -Wno-error=shift-negative-value -Wno-address-of-packed-member -Wno-error=unused-but-set-variable -Wno-format-zero-length   -mno-aes -mno-avx  -std=iso9899:1999 -Werror  /usr/src/sys/kern/kern_proc.c
```


----------



## W.hâ/t (Nov 27, 2022)

He is on 13.1.


```
wxmap_ctl(struct thread *td, struct proc *p, void *data)
{
    struct vmspace *vm;
    vm_map_t map;
    int state;

    PROC_LOCK_ASSERT(p, MA_OWNED);
    if ((p->p_flag & P_WEXIT) != 0)
        return (ESRCH);
    state = *(int *)data;

    switch (state) {
    case PROC_WX_MAPPINGS_PERMIT:
        p->p_flag2 |= P2_WXORX_DISABLE;
        _PHOLD(p);
        PROC_UNLOCK(p);
        vm = vmspace_acquire_ref(p);
        if (vm != NULL) {
            map = &vm->vm_map;
            vm_map_lock(map);
            map->flags &= ~MAP_WXORX;
            vm_map_unlock(map);
            vmspace_free(vm);
        }
        PROC_LOCK(p);
        _PRELE(p);
        break;
    case PROC_WX_MAPPINGS_DISALLOW_EXEC:
        p->p_flag2 |= P2_WXORX_ENABLE_EXEC;
        break;
    default:
        return (EINVAL);
    }

    return (0);
}
```

If state never match or vm is always null, is it possible that the optimisation create this error?


----------



## driker (Nov 27, 2022)

Phishfry said:


> What version of FreeBSD are you using for this build?
> 
> How did you install your source tree?
> 
> ...


13.1.  I got source installed when installing from the img file.  It's never been online either so I know nothing was updated and there's no mismatch in versions.  



W.hâ/t said:


> He is on 13.1.
> 
> 
> ```
> ...


I haven't actively set any optimizations.  Are they automatically done?  I was thinking of attempting to use minibsd to see if that would make a difference.


----------



## W.hâ/t (Nov 27, 2022)

driker said:


> I haven't actively set any optimizations. Are they automatically done


Yes they are set in /usr/share/mk/sys.mk

It's seems to me that struct vmspace is undefined.
Run this and look for a warning.
`grep -A3 'vm_map.c' /usr/obj/nanobsd.full/_.bk`

EDIT:

Where did you get the image from?

This is from FreeBSD-13.1-RELEASE-amd64-disc1.iso

```
# grep '\*data = d' sys/kern/kern_procctl.c'
#
# grep 'data = d' sys/kern/kern_procctl.c
        *(int *)data = d;
        *(int *)data = d;
        *(int *)data = d;
        *(int *)data = d;
#
```


----------

