gokrazy provides a handy way to create the permanent data filesystem on the fourth partition of your gokrazy installation.
The gokrazy/mkfs program will create the filesystem.
To actually access the permanent data partition from your own program, gokrazy will mount the partition under /perm
directory during the startup.
You can add the gokrazy/mkfs
program to your gokrazy instance:
gok add github.com/gokrazy/mkfs
…or, if you want to run it only once without otherwise including it in your
installation, you can use gok run
:
git clone https://github.com/gokrazy/mkfs
cd mkfs
gok -i bakery run
The Go program demonstrates the functionality of the permanent data mount:
package main
import (
"encoding/json"
"errors"
"fmt"
"io/fs"
"io/ioutil"
"os"
)
const config = "/perm/my-example/config.json"
type Config struct {
FilesToCreate int `json:"files_to_create"`
}
func main() {
_, err := os.Stat(config)
if err != nil {
fsErr := &fs.ErrNotExist
if !errors.As(err, fsErr) {
panic(err)
}
content, err := json.Marshal(&Config{FilesToCreate: 4})
if err != nil {
panic(err)
}
if err = ioutil.WriteFile(config, content, 0600); err != nil {
panic(err)
}
}
content, err := ioutil.ReadFile(config)
if err != nil {
panic(err)
}
var c Config
if err := json.Unmarshal(content, &c); err != nil {
panic(err)
}
for i := 0; i < c.FilesToCreate; i++ {
if err := ioutil.WriteFile(fmt.Sprintf("/perm/my-example/%d.txt", i), []byte("gokrazy rocks"), 0600); err != nil {
panic(err)
}
}
}
You can inspect and modify the data on the permanent data filesystem manually. This can be handy if you need e.g. to pass a configuration file for your application. To access the filesystem put the SD card into your PC/notebook. Your OS will likely mount the filesystem automatically. Copy the file to the permanent data filesystem.
mkdir /path/to-mounted/filesystem/my-example
sudo cp config.json /path/to-mounted/filesystem/my-example
If you want to access files on the permanent data filesystem you may need the sudo capability.
In macOS, to identify what device file maps to the mini sd card use:
$ diskutil list
If you want to create an ext4 filesystem from macOS, use the ext2/3/4 utilities. The easiest way to install them is via homebrew.
With the utilities installed you can run (replace X and Y based on the diskutil list
output):
$ sudo `brew --prefix e2fsprogs`/sbin/mkfs.ext4 /dev/diskXsY