diff --git a/cook.sh b/cook.sh
index 7495999aa3a8f48f1b0d4b16d11e6867dc9941bf..2432e9aff981e55cebaf54d3ef5a271e583c11d6 100755
--- a/cook.sh
+++ b/cook.sh
@@ -195,12 +195,20 @@ function op {
             rm -rfv stage
             ;;
         tar)
+            # Compile pkgutils if needed
+            if [ ! -f "$ROOT/pkgutils/target/release/pkg" ]
+            then
+                pushd "$ROOT/pkgutils/" > /dev/null
+                TARGET=x86_64-unknown-redox cargo build --release
+                popd > /dev/null
+            fi
+
             echo "name = \"$1\"" > "stage.toml"
             echo "version = \"$(op $1 version)\"" >> "stage.toml"
             echo "target = \"$TARGET\"" >> "stage.toml"
             mkdir -p stage/pkg
             cp -v stage.toml "stage/pkg/$1.toml"
-            TARGET=x86_64-unknown-redox cargo run --release --manifest-path "$ROOT/pkgutils/Cargo.toml" --bin pkg -- create stage
+            "$ROOT/pkgutils/target/release/pkg" create stage
             ;;
         untar)
             rm -rfv stage.tar stage.sig stage.toml