- Сборка кастомной прошивки OpenWRT
- Руководство для начинающих по созданию собственной прошивки
- 1 — Getting a Linux server (for Windows user)
- 1.1 Get Virtualbox
- 1.2 Get a Debian image
- 1.3 Install the virtual server
- 1.4 Initial Debian setup
- 2 — Compiling OpenWrt
- 2.1 Initial check out of the code
- 2.2 General tips on using the config system
- 2.3 Determining Target (Selecting the router model)
- 2.4 Tips on what to include to get a functional image
- 2.5 Building the image
- 2.6 Starting over
Сборка кастомной прошивки OpenWRT
Не так давно озадачился поднятием на своем роутере D-Link DIR-320 сервера OpenVPN. Но после установки прошивки OpenWRT оказалось, что на 4-х мегабайтной флешке роутера не осталось достаточно места для установки OpenVPN. Выходом из ситуации стала сборка собственного варианта прошивки с помощью Image Generator, что позволило при том же наборе пакетов получить прошивку меньшего размера.
Прежде чем продолжить описание сборки, остановлюсь немного на том, как устроена корневая файловая система OpenWRT. Она представляет собой файловую систему mini_fo, которая прозрачно объединяет две другие файловые системы: неизменяемую SquashFS, смонтированную в /rom, и изменяемую JFFS2, смонтированную в /overlay. Все файлы, которые создаются или изменяются после установки прошивки, находятся в /overlay. При удалении файлов, изначально бывших в прошивке, mini_fo просто помечает их как удаленные, сами же файлы остаются в /rom и продолжают занимать место. Как SquashFS, так и JFFS2 используют сжатие, но SquashFS дает лучшую степень сжатия, поэтому помещение всех необходимых пакетов сразу в /rom дает прошивку меньшего размера. Исключение ненужных пакетов из прошивки также позволяет сэкономить столь драгоценное место на флешке.
- PROFILE — профиль сборки, который определяет список дополнительных пакетов для включения в прошивку. Список профилей можно получить с помощью make info. У меня по какой-то причине переменная не оказывала никакого влияния, и список необходимых для моего роутера пакетов пришлось указывать вручную.
- PACKAGES — список пакетов для добавления или удаления. Перед именами пакетов, которые необходимо удалить, ставится минус. При сборке вычисляются зависимости пакетов, которые также добавляются в прошивку.
- FILES — путь к директории с дополнительными файлами для включения в прошивку.
#!/bin/bash make image PROFILE="Broadcom-b43" PACKAGES="kmod-b43 kmod-b43legacy -wpad-mini wpad ip iptables-mod-conntrack-extra ntpclient miniupnpd openvpn ddns-scripts nano" FILES="files/"
Очень удобной оказалась возможность добавлять свои файлы в образ прошивки. Пользуясь тем, что все новые и измененные файлы находятся в /overlay, я написал скрипт backup.sh для извлечения таких файлов из устройства:
#!/bin/bash DATE=`date +%Y-%m-%dT%H:%M:%S` BACKUP="backup-$DATE.tar.gz" ROUTER=172.22.222.1 BASEDIR=`dirname $0` FILELIST="etc/" ssh root@$ROUTER tar -czf /tmp/$BACKUP -C /overlay -X /etc/backup_exclude $FILELIST scp root@$ROUTER:/tmp/$BACKUP $BASEDIR/backup/$BACKUP
Файлы META_* в /overlay являются служебными в файловой системе mini_fo и их нужно исключить. Поскольку встроенный в busybox архиватор tar для исключения файлов поддерживает только опцию -X, необходимо на роутере создать файл /etc/backup_exclude со следующим содержимым:
В одной директории со скриптом создаем подкаталог backup, куда и будут сохраняться архивы.
Новые и измененные файлы помещаем в каталог, на который ссылается переменная FILES, с сохранением структуры подкаталогов. Запускаем скрит make_image.sh и получаем в каталоге bin преднастроенную прошивку со всем необходимым ПО.
Руководство для начинающих по созданию собственной прошивки
Цель этого руководства — позволить вам создать собственную прошивку за несколько шагов. Руковдство предназначено для пользователей Windows и пользователей, у которых уже есть Linux Debian или Ubuntu. Вам необходимо иметь 64-разрядную версию Windows и не менее 8 ГБ свободного дискового пространства. Настройка для сборки под Mac будет очень похожа (Virtualbox доступна), но у меня ее нет, поэтому я не могу ее протестировать.
The main advantage of building your own firmware is that it compresses the files, so that you will have room for much more stuff. It is particularly noticeable on routers with 16 MB flash RAM or less. It also lets you change some options that can only be changed at build time, for instance the features included in BusyBox and the block size of SquashFS. Larger block size will give better compression, but may also slow down the loading of files.
1 — Getting a Linux server (for Windows user)
If you already have a Debian/Ubuntu server you can skip to part 2.
As an alternative to setting up a virtual machine, Windows 10 users can install Ubuntu from Microsoft Store and skip to part 2. Make sure to run these commands after installation:
sudo apt-get update sudo apt-get upgrade
Disabling the virus scanner will speed up the compilation but Virtualbox is faster still.
1.1 Get Virtualbox
This program will let you run a virtual Linux server on you Windows based computer. Download the newest version from virtualbox.org and install using default settings.
1.2 Get a Debian image
Download the newest VirtualBox (VDI) 64bit Debian image (currently 9.3) from osboxes.org and unpack it using 7zip. 7zip can be downloaded from 7-zip.org.
1.3 Install the virtual server
Hard Disk: Select “Use an existing virtual hard disk file” and choose the Debian .vdi file you just unpacked.
Folder path: Click the down arrow, select Other and then the folder you want to share with the virtual Debian server (for transferring the firmware).
1.4 Initial Debian setup
The interface for changing the keyboard is a bit weird, but you can find the correct place like this:
From now on, whenever you should be in the terminal to type a command the syntax will look like this:
meaning you should type ls -l and press enter (try it). Follow up questions with obvious answers like typing the passsword (osboxes.org) og confirming with y will not be included specifically in this guide. Cut and paste will unfortunately not work at this moment.
su - nano /etc/apt/sources.list
You are now editing the list of servers to get updates from.
From the last two lines, remove the leading # and space, and the -updates after stretch. They should now look like this:
deb http://deb.debian.org/debian/ stretch main contrib deb-src http://deb.debian.org/debian/ stretch main contrib
apt update apt dist-upgrade reboot
Log in and open the terminal again when it has rebooted.
su - apt install linux-headers-amd64 make sudo
Click Devices (top line), select the last option (Install Guest Additions). The automatic install does not seem to work, so it doesn’t matter if you select cancel or run.
sh /media/cdrom/VBoxLinuxAdditions.run poweroff
After this you will need to start the server again. Now you can change to a higher resolution so you get a larger window if you like:
And lastly (hopefully you can cut and paste now). Note that cut and paste only works for text without any kind of formatting. You may need to copy the text to notepad and then copy it from there to clean it up.
su - adduser osboxes sudo echo ' osboxes ALL=(ALL) ALL' >> /etc/sudoers exit
Your virtual Debian server should now be set up correctly for following the rest of the guide. Congratulations. As a bonus, you now have a fully functional Linux computer that you can use for anything, and with the added safety of running it as a virtual machine. If you let the resolution match your monitor and select View/Full-screen mode there is almost no difference from a standalone Linux computer.
2 — Compiling OpenWrt
2.1 Initial check out of the code
Use the Beginners guide to building your own firmware for the initial checkout, but to get the stable version you need to do this after you run “cd openwrt”:
This will give you a list of tag names for releases and development branches. Check out the one you want like this:
2.2 General tips on using the config system
You select a package using space one or more times. When you select something, always make sure it has a * and not an M in the selected field. * means it will be included in the image, while M means that it will only create a package for it, which kind of defeats the point of following this guide.
Except for choosing the target I suggest that you don’t mess with the options above Base system. Also, in general, don’t uncheck anything that is selected by default unless you really know what you’re doing. If something is selected with “-*-” (so you can’t uncheck it) it is because something else depends on it.
Instructions on how to include config files in the image (for instance from the backup you can download from the router): Custom files
2.3 Determining Target (Selecting the router model)
Do a web search for
Select Subtarget. From the wikidevi page you know that it is a Ralink RT3662F, and the best fit in the list is “RT3662/RT3883 based boards”.
Select Target Profile. Asus RT-N56U is now listed here, so you know you chose the correct target and subtarget.
2.4 Tips on what to include to get a functional image
Don’t remove any of the default packages unless you know what you are doing. Some of them are crucial. See Saving firmware space
You’ll probably want the LuCi web admin interface, so choose LuCi/Collections/luci. If LuCI is not available then you have not successfully checked out the feeds, or they have been removed. This can also happen if you for instance run make clean.
The selectable software is in the submenues from “Base system” and downwards. Start by going to LuCI / Applications, as this section lists the LuCI packages for the most commonly used software. Selecting them will also include the required dependencies.
When you build your own firmware you can’t use the downloadable kernel packages (packages named kmod-
2.5 Building the image
when you have selected what you want. This will take a very long the first time. Don’t use the -j option mention in the Quick image building guide, it is asking for trouble.
If it completes without errors you should now have images. If not then try running
to get more details about the error. A common mistake is to include packages that are mutually exclusive. After a successful build you can list the generated files using this command:
Copy the image files to your shared Windows path:
sudo cp bin/targets/*/*/* /media/sf_Shared
Important: Make sure the image is at least about 500 KB less than the total amount of flash ROM, as some space is needed for configuration and other data. The absolute limit will vary depending on router model and how much configuration data you want to store. You can get an indication by being on the safe side the first time, and then check how much free space there is when you have installed it.
2.6 Starting over
To check out a different version:
the follow part 2 of the guide from the start, except you can skip the sudo apt-get commands.