duplicated.. This is to freeze a working version before I try to make macros work via call blocks...main
| @@ -0,0 +1,73 @@ | |||
| --- | |||
| title: Building bhyve Images using makefs and mkimg | |||
| description: > | |||
| this is a test blog post and a sample for things | |||
| created: !!timestamp '2014-10-29' | |||
| tags: | |||
| - bhyve | |||
| - FreeBSD | |||
| --- | |||
| Recently Neel Natu [committed](https://svnweb.freebsd.org/changeset/base/r273375) | |||
| work to enable bhyve to run on AMD processors. My main development | |||
| machine is an AMD A10-5700, so the commit enables me to use bhyve for | |||
| testing. | |||
| EDIT: Anish Gupta did the work that Neel Natu commited. Thanks Anish! | |||
| I had previously built images using makefs and mkimg for a CF card for | |||
| use in another machine, so being able to build images to use with bhyve | |||
| makes sense. | |||
| First, you need to make sure that you have a complete source check out | |||
| along with a completed buildworld and buildkernel. Then follow these steps: | |||
| 1. Install world and distribution into a temporary directory using the `NO_ROOT` option: | |||
| <pre>``` | |||
| make installworld DESTDIR=<tmpdir> -DDB_FROM_SRC -DNO_ROOT | |||
| make distribution DESTDIR=<tmpdir> -DDB_FROM_SRC -DNO_ROOT | |||
| ```</pre> | |||
| This preps everything with the defaults as necessary. | |||
| 2. Install a kernel either into a different directory (I do this) or into the same directory above: | |||
| <pre>``` | |||
| make installkernel DESTDIR=<tmpkerndir> -DNO_ROOT KERNCONF=<conf> | |||
| ```</pre> | |||
| 3. Make a directory with your custom configuration files. The basics | |||
| are `/etc/rc.conf` and `/etc/fstab` and you might want `/firstboot` on | |||
| there too. You will also need a METALOG file which contains the | |||
| permissions for the files. This is just a standard mtree file, so | |||
| you could use mtree to generate this instead of creating it by hand. | |||
| The file contents are below. | |||
| 4. Build the ufs image using the `makeroot.sh` script in the src tree at `tools/tools/makeroot/makeroot.sh`: | |||
| <pre>``` | |||
| /usr/src/tools/tools/makeroot/makeroot.sh -e <custdir>/METALOG -e <tmpkerndir>/METALOG -p <tmpdir>/etc/master.passwd -s 2g ufs.img root | |||
| ```</pre> | |||
| 5. Build the disc image: | |||
| <pre>``` | |||
| mkimg -s gpt -b <tmpdir>/boot/pmbr -p freebsd-boot:=<tmpdir>/boot/gptboot -p freebsd-swap::1G -p freebsd-ufs:=ufs.img -o disc.img | |||
| ```</pre> | |||
| 6. Run the image: | |||
| <pre>``` | |||
| sh /usr/share/examples/bhyve/vmrun.sh -d disc.img vm0 | |||
| ```</pre> | |||
| There you have it. Besides running the image, all the other steps can | |||
| be done as a normal user w/o root access. | |||
| EDIT: You also might want to include an `/entropy` file (populated with 4k | |||
| from `/dev/random`) in your custom directory so that the image has a good | |||
| seed for entropy at first boot for things such as sshd key generation. | |||
| File contents: | |||
| * `/etc/fstab`: | |||
| <pre>``` | |||
| /dev/vtbd0p3 / ufs rw 1 1 | |||
| ```</pre> | |||
| * Custom `METALOG`: | |||
| <pre>``` | |||
| #mtree 2.0 | |||
| ./etc/rc.conf type=file uname=root gname=wheel mode=0644 | |||
| ./etc/fstab type=file uname=root gname=wheel mode=0644 | |||
| ./firstboot type=file uname=root gname=wheel mode=0644 | |||
| ```</pre> | |||
| @@ -0,0 +1,3 @@ | |||
| extends: blog.j2 | |||
| default_block: post | |||
| listable: true | |||
| @@ -0,0 +1,6 @@ | |||
| --- | |||
| title: encthenet Ramblings | |||
| description: Blog of John-Mark Gurney | |||
| extends: frontpage.j2 | |||
| listable: false | |||
| --- | |||
| @@ -0,0 +1 @@ | |||
| extends: false | |||
| @@ -0,0 +1,28 @@ | |||
| <article class="post"> | |||
| <h1><a class="no-tufte-underline" href="{{ res.url }}">{{ res.meta.title }}</a></h1> | |||
| <p>Posted: {{ res.meta.created.strftime('%B %e, %Y') }}</p> | |||
| {% if res.meta.tags %} | |||
| <ul class="tags clear"> | |||
| {% for tag in res.meta.tags %} | |||
| <li> | |||
| <a class="small" href="{{ content_url('blog/tags/'~tag~'.html') }}"> | |||
| {{ tag }} | |||
| </a> | |||
| </li> | |||
| {% endfor %} | |||
| </ul> | |||
| {% endif %} | |||
| <div class="clear"/> | |||
| {% refer to res.relative_path as post %} | |||
| {{ post.post|markdown|typogrify }} | |||
| {# | |||
| {% filter markdown|typogrify -%} | |||
| {% mark post -%} | |||
| {% block post -%}{%- endblock %} | |||
| {%- endmark %} | |||
| {%- endfilter %} | |||
| #} | |||
| </article> | |||
| @@ -0,0 +1,92 @@ | |||
| <!doctype html> | |||
| <!-- https://github.com/paulirish/html5-boilerplate/blob/master/index.html --> | |||
| <!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ --> | |||
| <!--[if (gte IE 9)|!(IE)]><!--> <html lang="en" class="no-js"> <!--<![endif]--> | |||
| <head> | |||
| {% block starthead %}{% endblock starthead %} | |||
| <meta charset="{{ resource.meta.charset }}"> | |||
| <!-- Always force latest IE rendering engine (even in intranet) & Chrome Frame | |||
| Remove this if you use the .htaccess --> | |||
| <meta http-equiv="X-UA-Compatible" content="{{ resource.meta.compatibility }}"> | |||
| <!-- encoding must be specified within the first 512 bytes | |||
| www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#charset --> | |||
| <!-- meta element for compatibility mode needs to be before | |||
| all elements except title & meta | |||
| msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx --> | |||
| <!-- Chrome Frame is only invoked if meta element for | |||
| compatibility mode is within the first 1K bytes | |||
| code.google.com/p/chromium/issues/detail?id=23003 --> | |||
| <!-- automatically refresh, add/remove closing comment to enable/disable | |||
| <meta http-equiv="refresh" content="2"> | |||
| <!-- end comment for above refresh --> | |||
| <!-- Twitter cards, OpenGraph and Slack unfurling --> | |||
| <meta name="twitter:card" content="summary" /> | |||
| {% if resource.meta.twittertitle %} | |||
| <meta property="og:title" content="{{ resource.meta.twittertitle }}" /> | |||
| {% else %} | |||
| <meta property="og:title" content="{{ resource.meta.title }}" /> | |||
| {% endif %} | |||
| <meta property="og:description" content="{{ resource.meta.description }}" /> | |||
| {% if resource.meta.image %} <meta property="og:image" content="{{ resource.meta.image }}" />{% endif %} | |||
| {% if resource.meta.imagealt %} <meta name="twitter:image:alt" content="{{ resource.meta.imagealt }}" />{% endif %} | |||
| {% if resource.meta.twitterlabel1 %} <meta name="twitter:label1" content="{{ resource.meta.twitterlabel1 }}" />{% endif %} | |||
| {% if resource.meta.twitterlabel2 %} <meta name="twitter:label2" content="{{ resource.meta.twitterlabel2 }}" />{% endif %} | |||
| {% if resource.meta.twitterdata1 %} <meta name="twitter:data1" content="{{ resource.meta.twitterdata1 }}" />{% endif %} | |||
| {% if resource.meta.twitterdata2 %} <meta name="twitter:data2" content="{{ resource.meta.twitterdata2 }}" />{% endif %} | |||
| <title>{% block title %}{{ resource.meta.title }}{% endblock %}</title> | |||
| <meta name="description" content="{{ resource.meta.description }}"> | |||
| <meta name="author" content="{{ resource.meta.author }}"> | |||
| <!-- Mobile viewport optimized: j.mp/bplateviewport --> | |||
| <meta name="viewport" content="{{ resource.meta.viewport }}"> | |||
| {% block css %} | |||
| <link rel="stylesheet" href="{{ media_url('css/tufte.css') }}"> | |||
| {% endblock css %} | |||
| {% block endhead %}{% endblock endhead %} | |||
| </head> | |||
| <body id="{{ resource.meta.id if resource.meta.id else resource.slug }}"> | |||
| {% block content %} | |||
| <div class="site" id="main" role="main"> | |||
| {% block container %} | |||
| <header class="banner clearfix title"> | |||
| {% block header -%} | |||
| <h1>{{ site.context.title }}</h1> | |||
| {%- endblock %} | |||
| </header> | |||
| {% block main %} | |||
| {% endblock main %} | |||
| {% endblock container %} | |||
| <footer> | |||
| <div class="footer"> | |||
| <div class="contact"> | |||
| <ul> | |||
| <li><a href="https://twitter.com/{{ site.context.tweet_via }}">Twitter</a></li> | |||
| </ul> | |||
| </div> | |||
| </div> | |||
| </footer> | |||
| </div> | |||
| {% endblock content%} | |||
| {% block js %} | |||
| <!-- Javascript at the bottom for fast page loading --> | |||
| {% block scripts %} | |||
| {% endblock scripts %} | |||
| <!--[if lt IE 7 ]> | |||
| <script src="js/libs/dd_belatedpng.js"></script> | |||
| <script>DD_belatedPNG.fix('img, .png_bg'); // Fix any <img> or .png_bg bg-images. Also, please read goo.gl/mZiyb </script> | |||
| <![endif]--> | |||
| {% endblock js %} | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,35 @@ | |||
| {% from "macros.j2" import render with context %} | |||
| {% extends "base.j2" %} | |||
| {% block main -%} | |||
| starting test | |||
| {% include "article.j2" %} | |||
| ending test | |||
| <article class="post"> | |||
| <h1><a class="no-tufte-underline" href="{{ resource.url }}">{{ resource.meta.title }}</a></h1> | |||
| <p>Posted: {{ resource.meta.created.strftime('%B %e, %Y') }}</p> | |||
| {{ resource.meta.created.tz }} | |||
| {% if resource.meta.tags %} | |||
| <ul class="tags clear"> | |||
| {% for tag in resource.meta.tags %} | |||
| <li> | |||
| <a class="small" href="{{ content_url('blog/tags/'~tag~'.html') }}"> | |||
| {{ tag }} | |||
| </a> | |||
| </li> | |||
| {% endfor %} | |||
| </ul> | |||
| {% endif %} | |||
| <div class="clear"/> | |||
| {% filter markdown|typogrify -%} | |||
| {% mark post -%} | |||
| {% block post -%}{%- endblock %} | |||
| {%- endmark %} | |||
| {%- endfilter %} | |||
| </article> | |||
| {%- endblock %} | |||
| @@ -0,0 +1,21 @@ | |||
| {% extends "base.j2" %} | |||
| {% from "macros.j2" import render with context %} | |||
| {% block main %} | |||
| <!-- | |||
| {% block page_title %}<h1 class="title">{{ resource.meta.title }}</h1>{% endblock %} | |||
| --> | |||
| {% for res in resource.node.walk_resources_sorted_by_time()[0:1] %} | |||
| block test | |||
| prerender macro | |||
| {% include "article.j2" %} | |||
| old data | |||
| <h1><a href="{{ res.relative_path }}">{{ res.meta.title }}</a></h1> | |||
| {% refer to res.relative_path as post %} | |||
| {{ post.post|markdown|typogrify }} | |||
| {% endfor %} | |||
| {% endblock %} | |||
| @@ -0,0 +1,31 @@ | |||
| {% macro render(res) %} | |||
| {% refer to res.relative_path as post %} | |||
| <article class="post"> | |||
| <h1><a class="no-tufte-underline" href="{{ res.url }}">{{ res.meta.title }}</a></h1> | |||
| <p>Posted: {{ res.meta.created.strftime('%B %e, %Y') }}</p> | |||
| {% if res.meta.tags %} | |||
| <ul class="tags clear"> | |||
| {% for tag in res.meta.tags %} | |||
| <li> | |||
| <a class="small" href="{{ content_url('blog/tags/'~tag~'.html') }}"> | |||
| {{ tag }} | |||
| </a> | |||
| </li> | |||
| {% endfor %} | |||
| </ul> | |||
| {% endif %} | |||
| <div class="clear"/> | |||
| {% refer to res.relative_path as post %} | |||
| {{ post.post|markdown|typogrify }} | |||
| {# | |||
| {% filter markdown|typogrify -%} | |||
| {% mark post -%} | |||
| {% block post -%}{%- endblock %} | |||
| {%- endmark %} | |||
| {%- endfilter %} | |||
| #} | |||
| </article> | |||
| {% endmacro %} | |||