@fredlackey/devutils 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/package.json +1 -1
- package/src/commands/install.js +374 -36
- package/src/installs/adobe-creative-cloud.js +527 -25
- package/src/installs/adobe-creative-cloud.md +605 -0
- package/src/installs/appcleaner.js +303 -26
- package/src/installs/appcleaner.md +699 -0
- package/src/installs/apt-transport-https.js +390 -0
- package/src/installs/apt-transport-https.md +678 -0
- package/src/installs/atomicparsley.js +624 -26
- package/src/installs/atomicparsley.md +795 -0
- package/src/installs/aws-cli.js +779 -26
- package/src/installs/aws-cli.md +727 -0
- package/src/installs/balena-etcher.js +688 -26
- package/src/installs/balena-etcher.md +761 -0
- package/src/installs/bambu-studio.js +912 -26
- package/src/installs/bambu-studio.md +780 -0
- package/src/installs/bash-completion.js +554 -23
- package/src/installs/bash-completion.md +833 -0
- package/src/installs/bash.js +399 -26
- package/src/installs/bash.md +993 -0
- package/src/installs/beyond-compare.js +585 -26
- package/src/installs/beyond-compare.md +813 -0
- package/src/installs/build-essential.js +511 -26
- package/src/installs/build-essential.md +977 -0
- package/src/installs/ca-certificates.js +618 -0
- package/src/installs/ca-certificates.md +937 -0
- package/src/installs/caffeine.js +490 -26
- package/src/installs/caffeine.md +839 -0
- package/src/installs/camtasia.js +577 -25
- package/src/installs/camtasia.md +762 -0
- package/src/installs/chatgpt.js +458 -26
- package/src/installs/chatgpt.md +814 -0
- package/src/installs/chocolatey.js +447 -0
- package/src/installs/chocolatey.md +661 -0
- package/src/installs/chrome-canary.js +472 -26
- package/src/installs/chrome-canary.md +641 -0
- package/src/installs/chromium.js +645 -26
- package/src/installs/chromium.md +838 -0
- package/src/installs/claude-code.js +558 -26
- package/src/installs/claude-code.md +1173 -0
- package/src/installs/curl.js +361 -26
- package/src/installs/curl.md +714 -0
- package/src/installs/cursor.js +561 -26
- package/src/installs/cursor.md +970 -0
- package/src/installs/dbschema.js +674 -26
- package/src/installs/dbschema.md +925 -0
- package/src/installs/dependencies.md +435 -0
- package/src/installs/development-tools.js +600 -0
- package/src/installs/development-tools.md +977 -0
- package/src/installs/docker.js +1010 -25
- package/src/installs/docker.md +1109 -0
- package/src/installs/drawio.js +1001 -26
- package/src/installs/drawio.md +795 -0
- package/src/installs/elmedia-player.js +328 -25
- package/src/installs/elmedia-player.md +556 -0
- package/src/installs/ffmpeg.js +870 -25
- package/src/installs/ffmpeg.md +852 -0
- package/src/installs/file.js +464 -0
- package/src/installs/file.md +987 -0
- package/src/installs/gemini-cli.js +793 -26
- package/src/installs/gemini-cli.md +1153 -0
- package/src/installs/git.js +382 -26
- package/src/installs/git.md +907 -0
- package/src/installs/gitego.js +931 -26
- package/src/installs/gitego.md +1172 -0
- package/src/installs/go.js +913 -26
- package/src/installs/go.md +958 -0
- package/src/installs/google-chrome.js +801 -25
- package/src/installs/google-chrome.md +862 -0
- package/src/installs/gpg.js +412 -73
- package/src/installs/gpg.md +1056 -0
- package/src/installs/homebrew.js +1015 -26
- package/src/installs/homebrew.md +988 -0
- package/src/installs/imageoptim.js +950 -26
- package/src/installs/imageoptim.md +1119 -0
- package/src/installs/installers.json +2297 -0
- package/src/installs/jq.js +382 -26
- package/src/installs/jq.md +809 -0
- package/src/installs/keyboard-maestro.js +701 -26
- package/src/installs/keyboard-maestro.md +825 -0
- package/src/installs/latex.js +771 -26
- package/src/installs/latex.md +1095 -0
- package/src/installs/lftp.js +338 -26
- package/src/installs/lftp.md +907 -0
- package/src/installs/lsb-release.js +346 -0
- package/src/installs/lsb-release.md +814 -0
- package/src/installs/messenger.js +829 -26
- package/src/installs/messenger.md +900 -0
- package/src/installs/microsoft-office.js +550 -26
- package/src/installs/microsoft-office.md +760 -0
- package/src/installs/microsoft-teams.js +782 -25
- package/src/installs/microsoft-teams.md +886 -0
- package/src/installs/node.js +886 -26
- package/src/installs/node.md +1153 -0
- package/src/installs/nordpass.js +698 -26
- package/src/installs/nordpass.md +921 -0
- package/src/installs/nvm.js +977 -26
- package/src/installs/nvm.md +1057 -0
- package/src/installs/openssh.js +734 -64
- package/src/installs/openssh.md +1056 -0
- package/src/installs/pandoc.js +644 -26
- package/src/installs/pandoc.md +1036 -0
- package/src/installs/pinentry.js +492 -26
- package/src/installs/pinentry.md +1142 -0
- package/src/installs/pngyu.js +851 -26
- package/src/installs/pngyu.md +896 -0
- package/src/installs/postman.js +781 -26
- package/src/installs/postman.md +940 -0
- package/src/installs/procps.js +425 -0
- package/src/installs/procps.md +851 -0
- package/src/installs/safari-tech-preview.js +355 -25
- package/src/installs/safari-tech-preview.md +533 -0
- package/src/installs/sfnt2woff.js +640 -26
- package/src/installs/sfnt2woff.md +795 -0
- package/src/installs/shellcheck.js +463 -26
- package/src/installs/shellcheck.md +1005 -0
- package/src/installs/slack.js +722 -25
- package/src/installs/slack.md +865 -0
- package/src/installs/snagit.js +566 -25
- package/src/installs/snagit.md +844 -0
- package/src/installs/software-properties-common.js +372 -0
- package/src/installs/software-properties-common.md +805 -0
- package/src/installs/spotify.js +858 -25
- package/src/installs/spotify.md +901 -0
- package/src/installs/studio-3t.js +803 -26
- package/src/installs/studio-3t.md +918 -0
- package/src/installs/sublime-text.js +780 -25
- package/src/installs/sublime-text.md +914 -0
- package/src/installs/superwhisper.js +687 -25
- package/src/installs/superwhisper.md +630 -0
- package/src/installs/tailscale.js +727 -26
- package/src/installs/tailscale.md +1100 -0
- package/src/installs/tar.js +389 -0
- package/src/installs/tar.md +946 -0
- package/src/installs/termius.js +780 -26
- package/src/installs/termius.md +844 -0
- package/src/installs/terraform.js +761 -26
- package/src/installs/terraform.md +899 -0
- package/src/installs/tidal.js +752 -25
- package/src/installs/tidal.md +864 -0
- package/src/installs/tmux.js +328 -26
- package/src/installs/tmux.md +1030 -0
- package/src/installs/tree.js +393 -26
- package/src/installs/tree.md +833 -0
- package/src/installs/unzip.js +460 -0
- package/src/installs/unzip.md +879 -0
- package/src/installs/vim.js +403 -26
- package/src/installs/vim.md +1040 -0
- package/src/installs/vlc.js +803 -26
- package/src/installs/vlc.md +927 -0
- package/src/installs/vscode.js +825 -26
- package/src/installs/vscode.md +1002 -0
- package/src/installs/wget.js +415 -0
- package/src/installs/wget.md +791 -0
- package/src/installs/whatsapp.js +710 -25
- package/src/installs/whatsapp.md +854 -0
- package/src/installs/winpty.js +352 -0
- package/src/installs/winpty.md +620 -0
- package/src/installs/woff2.js +535 -26
- package/src/installs/woff2.md +977 -0
- package/src/installs/wsl.js +572 -0
- package/src/installs/wsl.md +699 -0
- package/src/installs/xcode-clt.js +520 -0
- package/src/installs/xcode-clt.md +351 -0
- package/src/installs/xcode.js +542 -26
- package/src/installs/xcode.md +573 -0
- package/src/installs/yarn.js +806 -26
- package/src/installs/yarn.md +1074 -0
- package/src/installs/yq.js +636 -26
- package/src/installs/yq.md +944 -0
- package/src/installs/yt-dlp.js +683 -26
- package/src/installs/yt-dlp.md +946 -0
- package/src/installs/yum-utils.js +297 -0
- package/src/installs/yum-utils.md +648 -0
- package/src/installs/zoom.js +740 -25
- package/src/installs/zoom.md +884 -0
- package/src/scripts/README.md +567 -45
- package/src/scripts/STATUS.md +208 -0
- package/src/scripts/afk.js +395 -7
- package/src/scripts/backup-all.js +731 -9
- package/src/scripts/backup-source.js +711 -8
- package/src/scripts/brewd.js +373 -7
- package/src/scripts/brewi.js +505 -9
- package/src/scripts/brewr.js +512 -9
- package/src/scripts/brews.js +462 -9
- package/src/scripts/brewu.js +488 -7
- package/src/scripts/c.js +185 -7
- package/src/scripts/ccurl.js +325 -8
- package/src/scripts/certbot-crontab-init.js +488 -8
- package/src/scripts/certbot-init.js +641 -9
- package/src/scripts/ch.js +339 -7
- package/src/scripts/claude-danger.js +253 -8
- package/src/scripts/clean-dev.js +419 -8
- package/src/scripts/clear-dns-cache.js +525 -7
- package/src/scripts/clone.js +417 -7
- package/src/scripts/code-all.js +420 -7
- package/src/scripts/count-files.js +195 -8
- package/src/scripts/count-folders.js +195 -8
- package/src/scripts/count.js +248 -8
- package/src/scripts/d.js +203 -7
- package/src/scripts/datauri.js +373 -8
- package/src/scripts/delete-files.js +363 -7
- package/src/scripts/docker-clean.js +410 -8
- package/src/scripts/dp.js +426 -7
- package/src/scripts/e.js +375 -9
- package/src/scripts/empty-trash.js +497 -7
- package/src/scripts/evm.js +428 -9
- package/src/scripts/fetch-github-repos.js +441 -10
- package/src/scripts/get-channel.js +329 -8
- package/src/scripts/get-course.js +384 -11
- package/src/scripts/get-dependencies.js +290 -9
- package/src/scripts/get-folder.js +783 -10
- package/src/scripts/get-tunes.js +411 -10
- package/src/scripts/get-video.js +352 -9
- package/src/scripts/git-backup.js +561 -9
- package/src/scripts/git-clone.js +477 -9
- package/src/scripts/git-pup.js +303 -7
- package/src/scripts/git-push.js +380 -8
- package/src/scripts/h.js +607 -9
- package/src/scripts/hide-desktop-icons.js +483 -7
- package/src/scripts/hide-hidden-files.js +522 -7
- package/src/scripts/install-dependencies-from.js +440 -9
- package/src/scripts/ips.js +647 -10
- package/src/scripts/iso.js +354 -8
- package/src/scripts/killni.js +561 -7
- package/src/scripts/ll.js +451 -8
- package/src/scripts/local-ip.js +310 -8
- package/src/scripts/m.js +508 -8
- package/src/scripts/map.js +293 -8
- package/src/scripts/mkd.js +287 -7
- package/src/scripts/ncu-update-all.js +441 -8
- package/src/scripts/nginx-init.js +702 -12
- package/src/scripts/npmi.js +366 -7
- package/src/scripts/o.js +495 -8
- package/src/scripts/org-by-date.js +321 -7
- package/src/scripts/p.js +208 -7
- package/src/scripts/packages.js +313 -8
- package/src/scripts/path.js +209 -7
- package/src/scripts/ports.js +582 -8
- package/src/scripts/q.js +290 -8
- package/src/scripts/refresh-files.js +378 -10
- package/src/scripts/remove-smaller-files.js +500 -8
- package/src/scripts/rename-files-with-date.js +517 -9
- package/src/scripts/resize-image.js +523 -9
- package/src/scripts/rm-safe.js +653 -8
- package/src/scripts/s.js +525 -9
- package/src/scripts/set-git-public.js +349 -7
- package/src/scripts/show-desktop-icons.js +459 -7
- package/src/scripts/show-hidden-files.js +456 -7
- package/src/scripts/tpa.js +265 -8
- package/src/scripts/tpo.js +264 -7
- package/src/scripts/u.js +489 -7
- package/src/scripts/vpush.js +422 -8
- package/src/scripts/y.js +267 -7
- package/src/utils/common/os.js +94 -2
- package/src/utils/ubuntu/apt.js +13 -7
- package/src/utils/windows/choco.js +82 -26
- package/src/utils/windows/winget.js +89 -27
|
@@ -0,0 +1,977 @@
|
|
|
1
|
+
# Installing woff2
|
|
2
|
+
|
|
3
|
+
## Dependencies
|
|
4
|
+
|
|
5
|
+
### macOS (Homebrew)
|
|
6
|
+
- **Required:**
|
|
7
|
+
- `Homebrew` - Install via `/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"` or run `dev install homebrew`
|
|
8
|
+
- `Xcode Command Line Tools` - Install via `xcode-select --install`
|
|
9
|
+
- **Optional:** None
|
|
10
|
+
- **Auto-installed:**
|
|
11
|
+
- `brotli` - Compression library automatically installed by Homebrew when installing woff2
|
|
12
|
+
|
|
13
|
+
### Ubuntu (APT/Snap)
|
|
14
|
+
- **Required:**
|
|
15
|
+
- `sudo privileges` - Required for running apt-get commands
|
|
16
|
+
- **Optional:** None
|
|
17
|
+
- **Auto-installed:**
|
|
18
|
+
- All runtime dependencies are automatically handled by the APT package manager
|
|
19
|
+
|
|
20
|
+
### Raspberry Pi OS (APT/Snap)
|
|
21
|
+
- **Required:**
|
|
22
|
+
- `sudo privileges` - Required for running apt-get commands
|
|
23
|
+
- **Optional:** None
|
|
24
|
+
- **Auto-installed:**
|
|
25
|
+
- All runtime dependencies are automatically handled by the APT package manager
|
|
26
|
+
|
|
27
|
+
### Amazon Linux (DNF/YUM)
|
|
28
|
+
- **Required:**
|
|
29
|
+
- `sudo privileges` - Required for installing build dependencies and binaries
|
|
30
|
+
- `gcc-c++` - Install via `sudo dnf install -y gcc-c++` (AL2023) or `sudo yum install -y gcc-c++` (AL2)
|
|
31
|
+
- `cmake` - Install via `sudo dnf install -y cmake` (AL2023) or `sudo yum install -y cmake3` (AL2)
|
|
32
|
+
- `git` - Install via `sudo dnf install -y git` (AL2023) or `sudo yum install -y git` (AL2)
|
|
33
|
+
- `brotli-devel` - Install via `sudo dnf install -y brotli-devel` (AL2023 only; AL2 uses bundled brotli)
|
|
34
|
+
- **Optional:** None
|
|
35
|
+
- **Auto-installed:**
|
|
36
|
+
- `brotli` (bundled) - For Amazon Linux 2, brotli is included as a git submodule and compiled during the build process
|
|
37
|
+
|
|
38
|
+
### Windows (Chocolatey/winget)
|
|
39
|
+
- **Required:** Installation not yet supported on this platform
|
|
40
|
+
- **Optional:** None
|
|
41
|
+
- **Auto-installed:** None
|
|
42
|
+
- **Note:** The installer provides instructions to use WSL (Windows Subsystem for Linux) as an alternative. See the WSL section for WSL-specific dependencies.
|
|
43
|
+
|
|
44
|
+
### Git Bash (Manual/Portable)
|
|
45
|
+
- **Required:** Installation not yet supported on this platform
|
|
46
|
+
- **Optional:** None
|
|
47
|
+
- **Auto-installed:** None
|
|
48
|
+
- **Note:** The installer provides instructions to use WSL (Windows Subsystem for Linux) as an alternative, either by installing woff2 in WSL directly or by creating wrapper scripts in Git Bash that invoke WSL commands.
|
|
49
|
+
|
|
50
|
+
## Overview
|
|
51
|
+
|
|
52
|
+
woff2 is Google's reference implementation of the Web Open Font Format 2.0 (WOFF2), a modern, highly compressed container format for packaging TrueType and OpenType fonts for efficient delivery over the web. WOFF2 uses the Brotli compression algorithm to achieve significantly better compression ratios than the original WOFF 1.0 format, typically reducing font file sizes by 30% compared to WOFF 1.0 and up to 50-70% compared to uncompressed TTF/OTF fonts.
|
|
53
|
+
|
|
54
|
+
Key capabilities include:
|
|
55
|
+
|
|
56
|
+
- **Font Compression**: Convert TTF and OTF fonts to highly compressed WOFF2 format using `woff2_compress`
|
|
57
|
+
- **Font Decompression**: Convert WOFF2 files back to TTF format using `woff2_decompress`
|
|
58
|
+
- **Font Information**: Display metadata and file information using `woff2_info`
|
|
59
|
+
- **Brotli Compression**: Leverages Google's Brotli algorithm for superior compression ratios
|
|
60
|
+
- **Variable Font Support**: Full support for modern variable fonts and OpenType features
|
|
61
|
+
|
|
62
|
+
WOFF2 is the recommended format for web fonts due to its excellent browser support and compression efficiency. All modern browsers support WOFF2, making it the preferred choice for web developers optimizing font delivery.
|
|
63
|
+
|
|
64
|
+
## Prerequisites
|
|
65
|
+
|
|
66
|
+
Before installing woff2 on any platform, ensure:
|
|
67
|
+
|
|
68
|
+
1. **Internet connectivity** - Required to download packages or source code
|
|
69
|
+
2. **Administrative privileges** - Required for system-wide installation
|
|
70
|
+
3. **Sufficient disk space** - At least 100 MB for installation with dependencies (more if compiling from source)
|
|
71
|
+
|
|
72
|
+
## Platform-Specific Installation
|
|
73
|
+
|
|
74
|
+
### macOS (Homebrew)
|
|
75
|
+
|
|
76
|
+
#### Prerequisites
|
|
77
|
+
|
|
78
|
+
- macOS 12 (Monterey) or later
|
|
79
|
+
- Homebrew package manager installed
|
|
80
|
+
- Xcode Command Line Tools installed
|
|
81
|
+
|
|
82
|
+
If Homebrew is not installed, install it first:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
If Xcode Command Line Tools are not installed:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
xcode-select --install
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
#### Installation Steps
|
|
95
|
+
|
|
96
|
+
Run the following command to install woff2:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
brew install --quiet woff2
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
The `--quiet` flag suppresses non-essential output for cleaner automation. Homebrew automatically installs the required dependency `brotli` (the compression library) if it is not already present.
|
|
103
|
+
|
|
104
|
+
#### Verification
|
|
105
|
+
|
|
106
|
+
Confirm the installation succeeded by checking the version:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
woff2_compress --version
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Expected output (version numbers may vary):
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
woff2_compress 1.0.2
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Test that all tools are available:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
woff2_decompress --version
|
|
122
|
+
woff2_info --version
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Verify the installation path:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
which woff2_compress
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Expected output: `/opt/homebrew/bin/woff2_compress` (Apple Silicon) or `/usr/local/bin/woff2_compress` (Intel).
|
|
132
|
+
|
|
133
|
+
#### Troubleshooting
|
|
134
|
+
|
|
135
|
+
**Problem**: `woff2_compress: command not found` after installation
|
|
136
|
+
|
|
137
|
+
**Solution**: Homebrew may not be in your PATH. Add it to your shell profile:
|
|
138
|
+
|
|
139
|
+
For Apple Silicon Macs (M1/M2/M3/M4):
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zshrc
|
|
143
|
+
source ~/.zshrc
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
For Intel Macs:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
echo 'eval "$(/usr/local/bin/brew shellenv)"' >> ~/.zshrc
|
|
150
|
+
source ~/.zshrc
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**Problem**: Installation fails with permission errors
|
|
154
|
+
|
|
155
|
+
**Solution**: Fix Homebrew permissions:
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
sudo chown -R $(whoami) $(brew --prefix)/*
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
**Problem**: Outdated version installed
|
|
162
|
+
|
|
163
|
+
**Solution**: Update Homebrew and upgrade woff2:
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
brew update && brew upgrade woff2
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
### Ubuntu/Debian (APT)
|
|
172
|
+
|
|
173
|
+
#### Prerequisites
|
|
174
|
+
|
|
175
|
+
- Ubuntu 20.04 LTS or later, or Debian 11 (Bullseye) or later
|
|
176
|
+
- sudo privileges
|
|
177
|
+
- At least 50 MB free disk space
|
|
178
|
+
|
|
179
|
+
#### Installation Steps
|
|
180
|
+
|
|
181
|
+
Run the following commands to update the package index and install woff2:
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
|
|
185
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y woff2
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
The `DEBIAN_FRONTEND=noninteractive` environment variable and `-y` flag ensure fully unattended installation without prompts. The woff2 package includes three command-line utilities: `woff2_compress`, `woff2_decompress`, and `woff2_info`.
|
|
189
|
+
|
|
190
|
+
**Package versions by distribution:**
|
|
191
|
+
|
|
192
|
+
| Distribution | Version |
|
|
193
|
+
|--------------|---------|
|
|
194
|
+
| Ubuntu 24.04 (Noble) | 1.0.2-2build1 |
|
|
195
|
+
| Ubuntu 22.04 (Jammy) | 1.0.2-1build4 |
|
|
196
|
+
| Ubuntu 20.04 (Focal) | 1.0.2-1build2 |
|
|
197
|
+
| Debian 12 (Bookworm) | 1.0.2-2 |
|
|
198
|
+
| Debian 11 (Bullseye) | 1.0.2-1+b1 |
|
|
199
|
+
|
|
200
|
+
#### Verification
|
|
201
|
+
|
|
202
|
+
Confirm the installation succeeded:
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
woff2_compress --version
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
Expected output (version numbers may vary):
|
|
209
|
+
|
|
210
|
+
```
|
|
211
|
+
woff2_compress 1.0.2
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
Test that all tools are available:
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
woff2_decompress --version
|
|
218
|
+
woff2_info --version
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
Verify the installation path:
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
which woff2_compress
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
Expected output: `/usr/bin/woff2_compress`
|
|
228
|
+
|
|
229
|
+
#### Troubleshooting
|
|
230
|
+
|
|
231
|
+
**Problem**: `E: Unable to locate package woff2`
|
|
232
|
+
|
|
233
|
+
**Solution**: Update the package index:
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
If still unavailable, verify your sources.list includes the universe repository (Ubuntu):
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
sudo DEBIAN_FRONTEND=noninteractive add-apt-repository -y universe
|
|
243
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**Problem**: Need to install the development libraries
|
|
247
|
+
|
|
248
|
+
**Solution**: Install the development package for linking against libwoff:
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y libwoff-dev
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
### Raspberry Pi OS (APT)
|
|
257
|
+
|
|
258
|
+
#### Prerequisites
|
|
259
|
+
|
|
260
|
+
- Raspberry Pi OS (Bookworm or Bullseye), 32-bit or 64-bit
|
|
261
|
+
- Raspberry Pi 3 or later recommended
|
|
262
|
+
- sudo privileges
|
|
263
|
+
- At least 50 MB free disk space
|
|
264
|
+
|
|
265
|
+
#### Installation Steps
|
|
266
|
+
|
|
267
|
+
Raspberry Pi OS is based on Debian, so the installation process uses APT. Run the following commands:
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
|
|
271
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y woff2
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
**ARM Architecture Note**: The woff2 package is available for ARM architectures (armhf, arm64) in the Debian/Raspberry Pi OS repositories. The package is compiled natively for ARM, so no special considerations are required.
|
|
275
|
+
|
|
276
|
+
**Available ARM architectures:**
|
|
277
|
+
|
|
278
|
+
| Architecture | Description |
|
|
279
|
+
|--------------|-------------|
|
|
280
|
+
| arm64 | 64-bit Raspberry Pi OS (Pi 3, 4, 5 with 64-bit OS) |
|
|
281
|
+
| armhf | 32-bit Raspberry Pi OS (Pi 2, 3, 4, 5 with 32-bit OS) |
|
|
282
|
+
|
|
283
|
+
#### Verification
|
|
284
|
+
|
|
285
|
+
Confirm the installation succeeded:
|
|
286
|
+
|
|
287
|
+
```bash
|
|
288
|
+
woff2_compress --version
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
Expected output (version numbers may vary):
|
|
292
|
+
|
|
293
|
+
```
|
|
294
|
+
woff2_compress 1.0.2
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
Verify your architecture:
|
|
298
|
+
|
|
299
|
+
```bash
|
|
300
|
+
uname -m
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
Expected output: `aarch64` (64-bit) or `armv7l` (32-bit).
|
|
304
|
+
|
|
305
|
+
Test that all tools are available:
|
|
306
|
+
|
|
307
|
+
```bash
|
|
308
|
+
woff2_decompress --version
|
|
309
|
+
woff2_info --version
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
#### Troubleshooting
|
|
313
|
+
|
|
314
|
+
**Problem**: Package not found
|
|
315
|
+
|
|
316
|
+
**Solution**: Ensure your package lists are current:
|
|
317
|
+
|
|
318
|
+
```bash
|
|
319
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
**Problem**: Slow compression on older Raspberry Pi models
|
|
323
|
+
|
|
324
|
+
**Solution**: Font compression is CPU-intensive. On Raspberry Pi 2 or earlier models, expect longer processing times. Consider processing large font collections on a more powerful machine.
|
|
325
|
+
|
|
326
|
+
**Problem**: Out of memory during compression of large fonts
|
|
327
|
+
|
|
328
|
+
**Solution**: Add swap space if needed:
|
|
329
|
+
|
|
330
|
+
```bash
|
|
331
|
+
sudo fallocate -l 1G /swapfile
|
|
332
|
+
sudo chmod 600 /swapfile
|
|
333
|
+
sudo mkswap /swapfile
|
|
334
|
+
sudo swapon /swapfile
|
|
335
|
+
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
---
|
|
339
|
+
|
|
340
|
+
### Amazon Linux (DNF/YUM)
|
|
341
|
+
|
|
342
|
+
#### Prerequisites
|
|
343
|
+
|
|
344
|
+
- Amazon Linux 2023 (AL2023) or Amazon Linux 2 (AL2)
|
|
345
|
+
- sudo privileges
|
|
346
|
+
- Development tools for compiling from source
|
|
347
|
+
- At least 200 MB free disk space
|
|
348
|
+
|
|
349
|
+
**Important**: woff2 is NOT available in the standard Amazon Linux repositories or SPAL (Supplementary Packages for Amazon Linux). This guide compiles from source using the official Google codebase.
|
|
350
|
+
|
|
351
|
+
#### Installation Steps
|
|
352
|
+
|
|
353
|
+
**Step 1: Install build dependencies**
|
|
354
|
+
|
|
355
|
+
For Amazon Linux 2023:
|
|
356
|
+
|
|
357
|
+
```bash
|
|
358
|
+
sudo dnf install -y gcc-c++ cmake git brotli-devel
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
For Amazon Linux 2:
|
|
362
|
+
|
|
363
|
+
```bash
|
|
364
|
+
sudo yum install -y gcc-c++ cmake3 git
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
**Note**: Amazon Linux 2 does not have brotli-devel in its repositories. The build process will use the bundled brotli submodule.
|
|
368
|
+
|
|
369
|
+
**Step 2: Clone the source repository with submodules**
|
|
370
|
+
|
|
371
|
+
```bash
|
|
372
|
+
cd /tmp
|
|
373
|
+
git clone --recursive https://github.com/google/woff2.git
|
|
374
|
+
cd woff2
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
The `--recursive` flag ensures the brotli submodule is also cloned.
|
|
378
|
+
|
|
379
|
+
**Step 3: Build the tools**
|
|
380
|
+
|
|
381
|
+
For Amazon Linux 2023:
|
|
382
|
+
|
|
383
|
+
```bash
|
|
384
|
+
mkdir out
|
|
385
|
+
cd out
|
|
386
|
+
cmake ..
|
|
387
|
+
make -j$(nproc)
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
For Amazon Linux 2 (using cmake3):
|
|
391
|
+
|
|
392
|
+
```bash
|
|
393
|
+
mkdir out
|
|
394
|
+
cd out
|
|
395
|
+
cmake3 ..
|
|
396
|
+
make -j$(nproc)
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
**Step 4: Install the binaries**
|
|
400
|
+
|
|
401
|
+
```bash
|
|
402
|
+
sudo make install
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
This installs the binaries to `/usr/local/bin` and libraries to `/usr/local/lib64` (or `/usr/local/lib`).
|
|
406
|
+
|
|
407
|
+
**Step 5: Update the library cache**
|
|
408
|
+
|
|
409
|
+
```bash
|
|
410
|
+
sudo ldconfig
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
**Step 6: Clean up**
|
|
414
|
+
|
|
415
|
+
```bash
|
|
416
|
+
cd /
|
|
417
|
+
rm -rf /tmp/woff2
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
#### Verification
|
|
421
|
+
|
|
422
|
+
Confirm the installation succeeded:
|
|
423
|
+
|
|
424
|
+
```bash
|
|
425
|
+
woff2_compress --version
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
Expected output:
|
|
429
|
+
|
|
430
|
+
```
|
|
431
|
+
woff2_compress 1.0.2
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
Test that all tools are available:
|
|
435
|
+
|
|
436
|
+
```bash
|
|
437
|
+
woff2_decompress --version
|
|
438
|
+
woff2_info --version
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
#### Troubleshooting
|
|
442
|
+
|
|
443
|
+
**Problem**: `woff2_compress: command not found` after installation
|
|
444
|
+
|
|
445
|
+
**Solution**: Ensure `/usr/local/bin` is in your PATH:
|
|
446
|
+
|
|
447
|
+
```bash
|
|
448
|
+
echo $PATH | grep -q '/usr/local/bin' && echo "PATH OK" || echo "PATH missing /usr/local/bin"
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
If missing, add it:
|
|
452
|
+
|
|
453
|
+
```bash
|
|
454
|
+
echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.bashrc
|
|
455
|
+
source ~/.bashrc
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
**Problem**: `error while loading shared libraries: libwoff2common.so.1.0.2`
|
|
459
|
+
|
|
460
|
+
**Solution**: The library path may not be configured. Run:
|
|
461
|
+
|
|
462
|
+
```bash
|
|
463
|
+
sudo ldconfig
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
If the issue persists, add the library path explicitly:
|
|
467
|
+
|
|
468
|
+
```bash
|
|
469
|
+
echo '/usr/local/lib64' | sudo tee /etc/ld.so.conf.d/woff2.conf
|
|
470
|
+
sudo ldconfig
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
**Problem**: CMake fails with "Could NOT find Brotli"
|
|
474
|
+
|
|
475
|
+
**Solution**: For Amazon Linux 2023, install brotli-devel:
|
|
476
|
+
|
|
477
|
+
```bash
|
|
478
|
+
sudo dnf install -y brotli-devel
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
For Amazon Linux 2, use the bundled brotli by cloning with `--recursive`:
|
|
482
|
+
|
|
483
|
+
```bash
|
|
484
|
+
git clone --recursive https://github.com/google/woff2.git
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
**Problem**: Git clone fails
|
|
488
|
+
|
|
489
|
+
**Solution**: Ensure git is installed:
|
|
490
|
+
|
|
491
|
+
```bash
|
|
492
|
+
sudo dnf install -y git # AL2023
|
|
493
|
+
sudo yum install -y git # AL2
|
|
494
|
+
```
|
|
495
|
+
|
|
496
|
+
---
|
|
497
|
+
|
|
498
|
+
### Windows (Chocolatey)
|
|
499
|
+
|
|
500
|
+
#### Prerequisites
|
|
501
|
+
|
|
502
|
+
- Windows 10 or later (64-bit)
|
|
503
|
+
- Administrator PowerShell or Command Prompt
|
|
504
|
+
- Visual Studio Build Tools or Visual Studio with C++ support
|
|
505
|
+
- CMake and Git
|
|
506
|
+
|
|
507
|
+
**Important**: woff2 is NOT available as a Chocolatey or winget package. This guide compiles from source using Visual Studio Build Tools. For a simpler approach, use WSL (Windows Subsystem for Linux) instead.
|
|
508
|
+
|
|
509
|
+
#### Installation Steps
|
|
510
|
+
|
|
511
|
+
**Step 1: Install build prerequisites via Chocolatey**
|
|
512
|
+
|
|
513
|
+
Run the following commands in an Administrator PowerShell:
|
|
514
|
+
|
|
515
|
+
```powershell
|
|
516
|
+
choco install git -y
|
|
517
|
+
choco install cmake --installargs 'ADD_CMAKE_TO_PATH=System' -y
|
|
518
|
+
choco install visualstudio2022buildtools -y --package-parameters "--add Microsoft.VisualStudio.Workload.VCTools --includeRecommended"
|
|
519
|
+
```
|
|
520
|
+
|
|
521
|
+
Close and reopen PowerShell after installation to refresh the PATH.
|
|
522
|
+
|
|
523
|
+
**Step 2: Clone the source repository**
|
|
524
|
+
|
|
525
|
+
Open a new Administrator PowerShell and run:
|
|
526
|
+
|
|
527
|
+
```powershell
|
|
528
|
+
cd $env:TEMP
|
|
529
|
+
git clone --recursive https://github.com/google/woff2.git
|
|
530
|
+
cd woff2
|
|
531
|
+
```
|
|
532
|
+
|
|
533
|
+
**Step 3: Build using CMake and Visual Studio**
|
|
534
|
+
|
|
535
|
+
```powershell
|
|
536
|
+
mkdir out
|
|
537
|
+
cd out
|
|
538
|
+
cmake .. -G "Visual Studio 17 2022" -A x64
|
|
539
|
+
cmake --build . --config Release
|
|
540
|
+
```
|
|
541
|
+
|
|
542
|
+
**Step 4: Install the binaries**
|
|
543
|
+
|
|
544
|
+
Copy the built executables to a directory in your PATH:
|
|
545
|
+
|
|
546
|
+
```powershell
|
|
547
|
+
New-Item -ItemType Directory -Force -Path "$env:USERPROFILE\bin"
|
|
548
|
+
Copy-Item ".\Release\woff2_compress.exe" "$env:USERPROFILE\bin\"
|
|
549
|
+
Copy-Item ".\Release\woff2_decompress.exe" "$env:USERPROFILE\bin\"
|
|
550
|
+
Copy-Item ".\Release\woff2_info.exe" "$env:USERPROFILE\bin\"
|
|
551
|
+
```
|
|
552
|
+
|
|
553
|
+
**Step 5: Add to PATH**
|
|
554
|
+
|
|
555
|
+
```powershell
|
|
556
|
+
$userPath = [Environment]::GetEnvironmentVariable("PATH", "User")
|
|
557
|
+
if ($userPath -notlike "*$env:USERPROFILE\bin*") {
|
|
558
|
+
[Environment]::SetEnvironmentVariable("PATH", "$userPath;$env:USERPROFILE\bin", "User")
|
|
559
|
+
}
|
|
560
|
+
```
|
|
561
|
+
|
|
562
|
+
Close and reopen PowerShell to apply the PATH change.
|
|
563
|
+
|
|
564
|
+
**Step 6: Clean up**
|
|
565
|
+
|
|
566
|
+
```powershell
|
|
567
|
+
Remove-Item -Recurse -Force "$env:TEMP\woff2"
|
|
568
|
+
```
|
|
569
|
+
|
|
570
|
+
#### Verification
|
|
571
|
+
|
|
572
|
+
Open a new PowerShell window and run:
|
|
573
|
+
|
|
574
|
+
```powershell
|
|
575
|
+
woff2_compress --version
|
|
576
|
+
```
|
|
577
|
+
|
|
578
|
+
Expected output:
|
|
579
|
+
|
|
580
|
+
```
|
|
581
|
+
woff2_compress 1.0.2
|
|
582
|
+
```
|
|
583
|
+
|
|
584
|
+
Test that all tools are available:
|
|
585
|
+
|
|
586
|
+
```powershell
|
|
587
|
+
woff2_decompress --version
|
|
588
|
+
woff2_info --version
|
|
589
|
+
```
|
|
590
|
+
|
|
591
|
+
#### Troubleshooting
|
|
592
|
+
|
|
593
|
+
**Problem**: CMake fails to find Visual Studio
|
|
594
|
+
|
|
595
|
+
**Solution**: Ensure Visual Studio Build Tools are installed with C++ support:
|
|
596
|
+
|
|
597
|
+
```powershell
|
|
598
|
+
choco install visualstudio2022buildtools -y --package-parameters "--add Microsoft.VisualStudio.Workload.VCTools --includeRecommended"
|
|
599
|
+
```
|
|
600
|
+
|
|
601
|
+
**Problem**: `woff2_compress` is not recognized
|
|
602
|
+
|
|
603
|
+
**Solution**: Verify the binaries exist and PATH is set:
|
|
604
|
+
|
|
605
|
+
```powershell
|
|
606
|
+
Test-Path "$env:USERPROFILE\bin\woff2_compress.exe"
|
|
607
|
+
$env:PATH -split ';' | Select-String -Pattern 'bin'
|
|
608
|
+
```
|
|
609
|
+
|
|
610
|
+
Open a new PowerShell window to pick up PATH changes.
|
|
611
|
+
|
|
612
|
+
**Problem**: Build fails with linker errors
|
|
613
|
+
|
|
614
|
+
**Solution**: Ensure you are using the Release configuration:
|
|
615
|
+
|
|
616
|
+
```powershell
|
|
617
|
+
cmake --build . --config Release
|
|
618
|
+
```
|
|
619
|
+
|
|
620
|
+
**Problem**: Prefer a simpler installation method
|
|
621
|
+
|
|
622
|
+
**Solution**: Use WSL (Windows Subsystem for Linux) instead. See the WSL section below.
|
|
623
|
+
|
|
624
|
+
---
|
|
625
|
+
|
|
626
|
+
### WSL (Ubuntu)
|
|
627
|
+
|
|
628
|
+
#### Prerequisites
|
|
629
|
+
|
|
630
|
+
- Windows 10 version 2004 or higher, or Windows 11
|
|
631
|
+
- WSL 2 enabled with Ubuntu distribution installed
|
|
632
|
+
- sudo privileges within WSL
|
|
633
|
+
|
|
634
|
+
**Note**: WSL provides a full Linux environment, allowing you to use the native Ubuntu package. This is the recommended approach for Windows users who want to avoid compiling from source.
|
|
635
|
+
|
|
636
|
+
#### Installation Steps
|
|
637
|
+
|
|
638
|
+
Open your WSL Ubuntu terminal and run:
|
|
639
|
+
|
|
640
|
+
```bash
|
|
641
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
|
|
642
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y woff2
|
|
643
|
+
```
|
|
644
|
+
|
|
645
|
+
The installation process is identical to native Ubuntu since WSL Ubuntu uses the same package repositories.
|
|
646
|
+
|
|
647
|
+
#### Verification
|
|
648
|
+
|
|
649
|
+
Confirm the installation succeeded:
|
|
650
|
+
|
|
651
|
+
```bash
|
|
652
|
+
woff2_compress --version
|
|
653
|
+
```
|
|
654
|
+
|
|
655
|
+
Expected output (version numbers may vary):
|
|
656
|
+
|
|
657
|
+
```
|
|
658
|
+
woff2_compress 1.0.2
|
|
659
|
+
```
|
|
660
|
+
|
|
661
|
+
Test that all tools are available:
|
|
662
|
+
|
|
663
|
+
```bash
|
|
664
|
+
woff2_decompress --version
|
|
665
|
+
woff2_info --version
|
|
666
|
+
```
|
|
667
|
+
|
|
668
|
+
#### Troubleshooting
|
|
669
|
+
|
|
670
|
+
**Problem**: Package installation fails with network errors
|
|
671
|
+
|
|
672
|
+
**Solution**: WSL may have DNS issues. Update the resolv.conf:
|
|
673
|
+
|
|
674
|
+
```bash
|
|
675
|
+
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf > /dev/null
|
|
676
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
|
|
677
|
+
```
|
|
678
|
+
|
|
679
|
+
**Problem**: Need to process font files on Windows filesystem
|
|
680
|
+
|
|
681
|
+
**Solution**: Access Windows files through `/mnt/c/`:
|
|
682
|
+
|
|
683
|
+
```bash
|
|
684
|
+
# Example: Compress a font from Windows Downloads folder
|
|
685
|
+
woff2_compress /mnt/c/Users/YourUsername/Downloads/myfont.ttf
|
|
686
|
+
# Output will be /mnt/c/Users/YourUsername/Downloads/myfont.woff2
|
|
687
|
+
```
|
|
688
|
+
|
|
689
|
+
**Problem**: WSL itself is not installed
|
|
690
|
+
|
|
691
|
+
**Solution**: Install WSL from an Administrator PowerShell on Windows:
|
|
692
|
+
|
|
693
|
+
```powershell
|
|
694
|
+
wsl --install
|
|
695
|
+
```
|
|
696
|
+
|
|
697
|
+
Restart your computer after installation.
|
|
698
|
+
|
|
699
|
+
**Problem**: Need to use woff2 from Windows command line
|
|
700
|
+
|
|
701
|
+
**Solution**: You can call WSL commands from Windows:
|
|
702
|
+
|
|
703
|
+
```powershell
|
|
704
|
+
wsl woff2_compress /mnt/c/Users/YourUsername/Downloads/myfont.ttf
|
|
705
|
+
```
|
|
706
|
+
|
|
707
|
+
---
|
|
708
|
+
|
|
709
|
+
### Git Bash (Manual/Portable)
|
|
710
|
+
|
|
711
|
+
#### Prerequisites
|
|
712
|
+
|
|
713
|
+
- Windows 10 or later (64-bit)
|
|
714
|
+
- Git Bash installed (comes with Git for Windows)
|
|
715
|
+
- WSL with Ubuntu installed (recommended approach)
|
|
716
|
+
|
|
717
|
+
**Note**: Git Bash runs in a MinGW environment on Windows. Compiling woff2 natively in MinGW is complex due to build tool requirements. The recommended approach is to use WSL from within Git Bash.
|
|
718
|
+
|
|
719
|
+
#### Installation Steps
|
|
720
|
+
|
|
721
|
+
**Recommended: Use WSL from Git Bash**
|
|
722
|
+
|
|
723
|
+
If WSL is installed with Ubuntu, you can use woff2 through WSL:
|
|
724
|
+
|
|
725
|
+
**Step 1: Install woff2 in WSL**
|
|
726
|
+
|
|
727
|
+
From Git Bash, run:
|
|
728
|
+
|
|
729
|
+
```bash
|
|
730
|
+
wsl sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
|
|
731
|
+
wsl sudo DEBIAN_FRONTEND=noninteractive apt-get install -y woff2
|
|
732
|
+
```
|
|
733
|
+
|
|
734
|
+
**Step 2: Create wrapper scripts**
|
|
735
|
+
|
|
736
|
+
Create wrapper scripts in Git Bash to call the WSL commands:
|
|
737
|
+
|
|
738
|
+
```bash
|
|
739
|
+
mkdir -p ~/bin
|
|
740
|
+
|
|
741
|
+
cat > ~/bin/woff2_compress << 'EOF'
|
|
742
|
+
#!/bin/bash
|
|
743
|
+
wsl woff2_compress "$@"
|
|
744
|
+
EOF
|
|
745
|
+
chmod +x ~/bin/woff2_compress
|
|
746
|
+
|
|
747
|
+
cat > ~/bin/woff2_decompress << 'EOF'
|
|
748
|
+
#!/bin/bash
|
|
749
|
+
wsl woff2_decompress "$@"
|
|
750
|
+
EOF
|
|
751
|
+
chmod +x ~/bin/woff2_decompress
|
|
752
|
+
|
|
753
|
+
cat > ~/bin/woff2_info << 'EOF'
|
|
754
|
+
#!/bin/bash
|
|
755
|
+
wsl woff2_info "$@"
|
|
756
|
+
EOF
|
|
757
|
+
chmod +x ~/bin/woff2_info
|
|
758
|
+
```
|
|
759
|
+
|
|
760
|
+
**Step 3: Add to PATH**
|
|
761
|
+
|
|
762
|
+
```bash
|
|
763
|
+
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
|
|
764
|
+
source ~/.bashrc
|
|
765
|
+
```
|
|
766
|
+
|
|
767
|
+
#### Verification
|
|
768
|
+
|
|
769
|
+
Confirm the installation succeeded:
|
|
770
|
+
|
|
771
|
+
```bash
|
|
772
|
+
woff2_compress --version
|
|
773
|
+
```
|
|
774
|
+
|
|
775
|
+
Expected output (version numbers may vary):
|
|
776
|
+
|
|
777
|
+
```
|
|
778
|
+
woff2_compress 1.0.2
|
|
779
|
+
```
|
|
780
|
+
|
|
781
|
+
Test that all tools are available:
|
|
782
|
+
|
|
783
|
+
```bash
|
|
784
|
+
woff2_decompress --version
|
|
785
|
+
woff2_info --version
|
|
786
|
+
```
|
|
787
|
+
|
|
788
|
+
#### Troubleshooting
|
|
789
|
+
|
|
790
|
+
**Problem**: `wsl: command not found`
|
|
791
|
+
|
|
792
|
+
**Solution**: WSL is not installed or not in PATH. Install WSL from an Administrator PowerShell:
|
|
793
|
+
|
|
794
|
+
```powershell
|
|
795
|
+
wsl --install
|
|
796
|
+
```
|
|
797
|
+
|
|
798
|
+
**Problem**: Path conversion issues with Windows-style paths
|
|
799
|
+
|
|
800
|
+
**Solution**: Use WSL path format when calling the commands:
|
|
801
|
+
|
|
802
|
+
```bash
|
|
803
|
+
# Convert Windows path to WSL path
|
|
804
|
+
# Instead of: woff2_compress "C:\Users\Me\Fonts\font.ttf"
|
|
805
|
+
woff2_compress "/mnt/c/Users/Me/Fonts/font.ttf"
|
|
806
|
+
```
|
|
807
|
+
|
|
808
|
+
**Problem**: Need native Windows binaries
|
|
809
|
+
|
|
810
|
+
**Solution**: Follow the Windows (Chocolatey) section to compile from source, or use pre-built binaries if available from third-party sources.
|
|
811
|
+
|
|
812
|
+
---
|
|
813
|
+
|
|
814
|
+
## Post-Installation Configuration
|
|
815
|
+
|
|
816
|
+
After installing woff2 on any platform, review these usage examples and tips.
|
|
817
|
+
|
|
818
|
+
### Basic Usage
|
|
819
|
+
|
|
820
|
+
**Compress a TrueType font to WOFF2:**
|
|
821
|
+
|
|
822
|
+
```bash
|
|
823
|
+
woff2_compress myfont.ttf
|
|
824
|
+
# Creates myfont.woff2 in the same directory
|
|
825
|
+
```
|
|
826
|
+
|
|
827
|
+
**Decompress a WOFF2 font back to TrueType:**
|
|
828
|
+
|
|
829
|
+
```bash
|
|
830
|
+
woff2_decompress myfont.woff2
|
|
831
|
+
# Creates myfont.ttf in the same directory
|
|
832
|
+
```
|
|
833
|
+
|
|
834
|
+
**Display information about a WOFF2 file:**
|
|
835
|
+
|
|
836
|
+
```bash
|
|
837
|
+
woff2_info myfont.woff2
|
|
838
|
+
```
|
|
839
|
+
|
|
840
|
+
### Batch Processing
|
|
841
|
+
|
|
842
|
+
Convert all TTF files in a directory to WOFF2:
|
|
843
|
+
|
|
844
|
+
```bash
|
|
845
|
+
for f in *.ttf; do woff2_compress "$f"; done
|
|
846
|
+
```
|
|
847
|
+
|
|
848
|
+
Convert all OTF files (note: OTF files work the same way):
|
|
849
|
+
|
|
850
|
+
```bash
|
|
851
|
+
for f in *.otf; do woff2_compress "$f"; done
|
|
852
|
+
```
|
|
853
|
+
|
|
854
|
+
### Comparing Compression Results
|
|
855
|
+
|
|
856
|
+
Check file sizes before and after compression:
|
|
857
|
+
|
|
858
|
+
```bash
|
|
859
|
+
# Original file size
|
|
860
|
+
ls -lh myfont.ttf
|
|
861
|
+
|
|
862
|
+
# Compress
|
|
863
|
+
woff2_compress myfont.ttf
|
|
864
|
+
|
|
865
|
+
# Compressed file size
|
|
866
|
+
ls -lh myfont.woff2
|
|
867
|
+
```
|
|
868
|
+
|
|
869
|
+
Typical compression ratios:
|
|
870
|
+
- WOFF2 is typically 30% smaller than WOFF 1.0
|
|
871
|
+
- WOFF2 is typically 50-70% smaller than uncompressed TTF/OTF
|
|
872
|
+
|
|
873
|
+
### Integration with Build Tools
|
|
874
|
+
|
|
875
|
+
For web development projects, you can integrate woff2 into your build process:
|
|
876
|
+
|
|
877
|
+
```bash
|
|
878
|
+
# Example: Compress all fonts in a fonts directory
|
|
879
|
+
find ./fonts -name "*.ttf" -exec woff2_compress {} \;
|
|
880
|
+
find ./fonts -name "*.otf" -exec woff2_compress {} \;
|
|
881
|
+
```
|
|
882
|
+
|
|
883
|
+
---
|
|
884
|
+
|
|
885
|
+
## Common Issues
|
|
886
|
+
|
|
887
|
+
### Issue: Compression Fails with No Output
|
|
888
|
+
|
|
889
|
+
**Symptoms**: `woff2_compress` runs but no .woff2 file is created
|
|
890
|
+
|
|
891
|
+
**Solutions**:
|
|
892
|
+
|
|
893
|
+
- Verify the input file exists and is a valid TTF or OTF font:
|
|
894
|
+
|
|
895
|
+
```bash
|
|
896
|
+
file myfont.ttf
|
|
897
|
+
```
|
|
898
|
+
|
|
899
|
+
Expected output should indicate a TrueType or OpenType font.
|
|
900
|
+
|
|
901
|
+
- Check file permissions on the output directory
|
|
902
|
+
- Ensure sufficient disk space
|
|
903
|
+
|
|
904
|
+
### Issue: "Malformed font" or Compression Errors
|
|
905
|
+
|
|
906
|
+
**Symptoms**: woff2_compress reports font data errors
|
|
907
|
+
|
|
908
|
+
**Solutions**:
|
|
909
|
+
|
|
910
|
+
- Verify the input file is a TrueType (.ttf) or OpenType (.otf) font, not already a WOFF or WOFF2 file
|
|
911
|
+
- Some fonts with unusual table structures may not compress correctly
|
|
912
|
+
- Try using a font editor (like FontForge) to re-export the font before compression
|
|
913
|
+
|
|
914
|
+
### Issue: Large Output File Size
|
|
915
|
+
|
|
916
|
+
**Symptoms**: WOFF2 file is not significantly smaller than the original
|
|
917
|
+
|
|
918
|
+
**Solutions**:
|
|
919
|
+
|
|
920
|
+
- This can occur with already-optimized fonts or fonts with embedded bitmaps
|
|
921
|
+
- WOFF2 works best with vector-based fonts
|
|
922
|
+
- Consider subsetting the font to remove unused glyphs using tools like `pyftsubset` from fonttools
|
|
923
|
+
|
|
924
|
+
### Issue: Decompressed Font Differs from Original
|
|
925
|
+
|
|
926
|
+
**Symptoms**: Round-trip compression/decompression produces a different file
|
|
927
|
+
|
|
928
|
+
**Solutions**:
|
|
929
|
+
|
|
930
|
+
- This is expected behavior. WOFF2 normalization may reorder tables or apply other transformations
|
|
931
|
+
- The fonts should be visually and functionally identical
|
|
932
|
+
- Compare glyphs using a font comparison tool rather than file hashes
|
|
933
|
+
|
|
934
|
+
### Issue: Variable Font Support
|
|
935
|
+
|
|
936
|
+
**Symptoms**: Variable fonts fail to compress or decompress correctly
|
|
937
|
+
|
|
938
|
+
**Solutions**:
|
|
939
|
+
|
|
940
|
+
- Ensure you have woff2 version 1.0.2 or later, which includes improved variable font support
|
|
941
|
+
- Complex variable fonts may require the latest version from the git repository
|
|
942
|
+
- Check the Google woff2 GitHub issues for known limitations
|
|
943
|
+
|
|
944
|
+
### Issue: Cannot Find Shared Libraries on Linux
|
|
945
|
+
|
|
946
|
+
**Symptoms**: `error while loading shared libraries: libwoff2common.so`
|
|
947
|
+
|
|
948
|
+
**Solutions**:
|
|
949
|
+
|
|
950
|
+
- Run `sudo ldconfig` to update the library cache
|
|
951
|
+
- Verify the library path is configured:
|
|
952
|
+
|
|
953
|
+
```bash
|
|
954
|
+
echo '/usr/local/lib64' | sudo tee /etc/ld.so.conf.d/woff2.conf
|
|
955
|
+
sudo ldconfig
|
|
956
|
+
```
|
|
957
|
+
|
|
958
|
+
- Alternatively, set LD_LIBRARY_PATH:
|
|
959
|
+
|
|
960
|
+
```bash
|
|
961
|
+
export LD_LIBRARY_PATH="/usr/local/lib64:$LD_LIBRARY_PATH"
|
|
962
|
+
```
|
|
963
|
+
|
|
964
|
+
---
|
|
965
|
+
|
|
966
|
+
## References
|
|
967
|
+
|
|
968
|
+
- [Google woff2 GitHub Repository](https://github.com/google/woff2)
|
|
969
|
+
- [WOFF 2.0 W3C Recommendation](https://www.w3.org/TR/WOFF2/)
|
|
970
|
+
- [WOFF 2.0 Evaluation Report](https://www.w3.org/TR/WOFF20ER/)
|
|
971
|
+
- [Homebrew woff2 Formula](https://formulae.brew.sh/formula/woff2)
|
|
972
|
+
- [Ubuntu Packages - woff2](https://packages.ubuntu.com/woff2)
|
|
973
|
+
- [Debian Packages - woff2](https://packages.debian.org/woff2)
|
|
974
|
+
- [Fedora Packages - woff2](https://packages.fedoraproject.org/pkgs/woff2/woff2/)
|
|
975
|
+
- [Brotli Compression Algorithm](https://github.com/google/brotli)
|
|
976
|
+
- [MDN Web Docs - WOFF2](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_fonts/WOFF)
|
|
977
|
+
- [Can I Use - WOFF2 Browser Support](https://caniuse.com/woff2)
|