# Workflow for persistent data across updates (internal golden updates)

**URL:** <https://hub.mender.io/t/workflow-for-persistent-data-across-updates-internal-golden-updates/2062>\
**Category:** General Discussions\
**Created:** [June 17, 2020, 4:23pm UTC](https://hub.mender.io/t/workflow-for-persistent-data-across-updates-internal-golden-updates/2062 "2020-06-17T16:23:52Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![ryanbedford](https://yyz2.discourse-cdn.com/flex036/user_avatar/hub.mender.io/ryanbedford/32/651_2.png) [@ryanbedford](https://hub.mender.io/u/ryanbedford)\
**Post date:** [June 17, 2020, 4:23pm UTC](https://hub.mender.io/t/workflow-for-persistent-data-across-updates-internal-golden-updates/2062/1 "2020-06-17T16:23:53Z")

</div>

Developers are working on a new internal golden image (NO MENDER). They have a place where user data files exists and persist. How do they make the transition from golden image (NO MENDER CLIENT or /data directory) to a Mender golden image?

Are they to create a /data directory in the internal golden image? Will that stay when making a mender golden image?

I guess the basic question can be summed up by asking… Where do developers write persistent data to on a NON MENDER image?

Ryan

---

<div class="post-metadata">

**Author:** ![drewmoseley](https://yyz2.discourse-cdn.com/flex036/user_avatar/hub.mender.io/drewmoseley/32/47_2.png) [@drewmoseley](https://hub.mender.io/u/drewmoseley)\
**Post date:** [June 17, 2020, 5:18pm UTC](https://hub.mender.io/t/workflow-for-persistent-data-across-updates-internal-golden-updates/2062/2 "2020-06-17T17:18:19Z")

</div>

Hi @ryanbedford if you put the files in /data in your non-mender golden image, mender-convert will arrange for them to be in the /data partition of the converted image.  
Drew

---

<div class="post-metadata">

**Author:** ![ryanbedford](https://yyz2.discourse-cdn.com/flex036/user_avatar/hub.mender.io/ryanbedford/32/651_2.png) [@ryanbedford](https://hub.mender.io/u/ryanbedford)\
**Post date:** [June 17, 2020, 7:50pm UTC](https://hub.mender.io/t/workflow-for-persistent-data-across-updates-internal-golden-updates/2062/3 "2020-06-17T19:50:05Z")

</div>

Awesome @drewmoseley! Makes sense, thank you!

---

<div class="post-metadata">

**Author:** ![ryanbedford](https://yyz2.discourse-cdn.com/flex036/user_avatar/hub.mender.io/ryanbedford/32/651_2.png) [@ryanbedford](https://hub.mender.io/u/ryanbedford)\
**Post date:** [June 18, 2020, 1:19pm UTC](https://hub.mender.io/t/workflow-for-persistent-data-across-updates-internal-golden-updates/2062/4 "2020-06-18T13:19:06Z")

</div>

@drewmoseley So if I put a /data directory in the rootfs overlay, will files in there get deployed out as well?

---

<div class="post-metadata">

**Author:** ![mirzak](https://yyz2.discourse-cdn.com/flex036/user_avatar/hub.mender.io/mirzak/32/2056_2.png) [@mirzak](https://hub.mender.io/u/mirzak)\
**Post date:** [June 18, 2020, 1:41pm UTC](https://hub.mender.io/t/workflow-for-persistent-data-across-updates-internal-golden-updates/2062/5 "2020-06-18T13:41:11Z")

</div>

Indeed it should @ryanbedford

---

<div class="post-metadata">

**Author:** ![marizonne.villafranc](https://avatars.discourse-cdn.com/v4/letter/m/ad7895/32.png) [@marizonne.villafranc](https://hub.mender.io/u/marizonne.villafranc)\
**Post date:** [August 2, 2021, 7:01am UTC](https://hub.mender.io/t/workflow-for-persistent-data-across-updates-internal-golden-updates/2062/6 "2021-08-02T07:01:47Z")

</div>

Hi,

How do you add the persistent config files to /data?

I did this …

```auto
do_install_append () {

 install -d ${D}${sysconfdir}/init.d
 install -m 0755 ${WORKDIR}/canstartup.sh	${D}${sysconfdir}/init.d
 install -m 0755 ${WORKDIR}/seccwifiAPsetup.sh	${D}${sysconfdir}/init.d
 install -m 0755 ${WORKDIR}/nvm.sh ${D}${sysconfdir}/init.d

 install -d ${D}${sysconfdir}/emmc
 install -m 0755 ${WORKDIR}/install_emmc.sh	${D}${sysconfdir}/emmc

 install -d ${D}${sysconfdir}/json
 install -m 0755 ${WORKDIR}/config.json ${D}${sysconfdir}/json
 install -m 0755 ${WORKDIR}/productionData.json ${D}${sysconfdir}/json

 install -d ${D}/data
 ln -s ${D}${sysconfdir}/json ${D}/data/json

 update-rc.d -r ${D} nvm.sh start 50 5 .		
 update-rc.d -r ${D} canstartup.sh start 51 5 .
 update-rc.d -r ${D} seccwifiAPsetup.sh start 52 5 .
}

FILES_${PN} += "${D}/data \
		${D}/data/json \
"

```

But, I got this error:

```auto
ERROR: initscripts-1.0-r155 do_package: QA Issue: initscripts: Files/directories were installed but not shipped in any package:
  /data
  /data/json
Please set FILES such that these items are packaged. Alternatively if they are unneeded, avoid installing them or delete them within do_install.
initscripts: 2 installed and not shipped files. [installed-vs-shipped]
ERROR: initscripts-1.0-r155 do_package: Fatal QA errors found, failing task.
ERROR: Logfile of failure stored in: /home/herodev/hero-yocto-mender/build/tmp/work/hero_secc-poky-linux-gnueabi/initscripts/1.0-r155/temp/log.do_package.16886
ERROR: Task (/home/herodev/hero-yocto-mender/sources/poky/meta/recipes-core/initscripts/initscripts_1.0.bb:do_package) failed with exit code '1'

```

---

<div class="post-metadata">

**Author:** ![kacf](https://yyz2.discourse-cdn.com/flex036/user_avatar/hub.mender.io/kacf/32/146_2.png) [@kacf](https://hub.mender.io/u/kacf)\
**Post date:** [August 2, 2021, 7:45am UTC](https://hub.mender.io/t/workflow-for-persistent-data-across-updates-internal-golden-updates/2062/7 "2021-08-02T07:45:56Z")

</div>

The `FILES` variable does not use `${D}`. Just remove it, and you should be fine.

---

<div class="post-metadata">

**Author:** ![marizonne.villafranc](https://avatars.discourse-cdn.com/v4/letter/m/ad7895/32.png) [@marizonne.villafranc](https://hub.mender.io/u/marizonne.villafranc)\
**Post date:** [August 2, 2021, 11:47pm UTC](https://hub.mender.io/t/workflow-for-persistent-data-across-updates-internal-golden-updates/2062/8 "2021-08-02T23:47:46Z")

</div>

Thank you very much for your quick reply! 🙂

---

<div class="post-metadata">

**Author:** ![marizonne.villafranc](https://avatars.discourse-cdn.com/v4/letter/m/ad7895/32.png) [@marizonne.villafranc](https://hub.mender.io/u/marizonne.villafranc)\
**Post date:** [August 3, 2021, 12:21am UTC](https://hub.mender.io/t/workflow-for-persistent-data-across-updates-internal-golden-updates/2062/9 "2021-08-03T00:21:45Z")

</div>

I think this should be the proper implementation:

```auto
SRC_URI += " file://config.json \
             file://productionData.json \
"

FILES_${PN} = "/var/lib/hero-secc/factorydata \
               /var/lib/hero-secc/userdata \
               /data/hero-secc/factorydata \
               /data/hero-secc/userdata \		        
"

do_install() {
	install -d -m 755 ${D}/data/hero-secc/factorydata
	install -m 755 ${WORKDIR}/productionData.json ${D}/data/hero-secc/factorydata
	install -d -m 755 ${D}/var/lib/hero-secc/factorydata
	ln -s /data/hero-secc/factorydata ${D}/var/lib/hero-secc/factorydata

	install -d -m 755 ${D}/data/hero-secc/userdata
	install -m 755 ${WORKDIR}/config.json ${D}/data/hero-secc/userdata
	install -d -m 755 ${D}/var/lib/hero-secc/userdata
	ln -s /data/hero-secc/userdata ${D}/var/lib/hero-secc/userdata
}

```
