Compare commits
31 Commits
Author | SHA1 | Date | |
---|---|---|---|
6710904301 | |||
ab19ae7b3b | |||
d10264d4c2 | |||
1bcd03dda0 | |||
420945c6c7 | |||
26a1fd4844 | |||
|
b2ef4a1e66 | ||
|
e6d0670714 | ||
|
39345d9b99 | ||
|
56bd4083bf | ||
|
e462c80afd | ||
|
1a2e7a08d6 | ||
|
9d16ed4fe0 | ||
|
d6a7a245fb | ||
|
23b66737a2 | ||
|
8ded32e7eb | ||
|
482b5d2c4b | ||
|
485b901342 | ||
|
7033086b0e | ||
|
f02d0d048d | ||
|
202f6963fe | ||
|
85691daad7 | ||
|
f71df24cd3 | ||
|
8afb5390c8 | ||
|
b7d70892bf | ||
|
b9bc3a6382 | ||
|
71cfded140 | ||
|
5689e53032 | ||
|
b4023f5460 | ||
|
a94e8c868f | ||
|
1b61abaa77 |
9
.gitignore
vendored
9
.gitignore
vendored
@ -1,5 +1,4 @@
|
||||
*.iso
|
||||
*.img
|
||||
*.qcow*
|
||||
windvn-*/
|
||||
output/
|
||||
/*.iso
|
||||
/*.img
|
||||
/windvn-*/
|
||||
/output/
|
||||
|
15
README.md
15
README.md
@ -3,25 +3,20 @@
|
||||
Devuan Linux for Windows users
|
||||
<a href="//git.lumen.sh/Fierelier/windvn/raw/branch/master/assets/screenshot.png" target="_blank"><img src="assets/screenshot.png" width="360" title="Screenshot"></a>
|
||||
|
||||
# Download (2023.03.28-22.26.39)
|
||||
- [amd64 (DVD): fat ISO, proprietary](https://fier.me/temp/windvn-amd64_chimaera_2023.03.28-22.26.39_proprietary.iso)
|
||||
- [i386 (256MB+ RAM, DVD): fat ISO, proprietary](https://fier.me/temp/windvn-i386_chimaera_2023.03.28-22.26.39_proprietary.iso)
|
||||
- [i386 Legacy (128MB+ RAM, CD): me.fier.de, nodocs, english only](https://fier.me/temp/windvn-i386_chimaera_2023.03.28-22.26.39_legacy_en.iso)
|
||||
# [Download](https://fier.me/software/windvn/iso/chimaera)
|
||||
|
||||
Fat ISOs have a full live environment. The desktop environment can be started by going into bash, and typing `startx`.
|
||||
Regular ISOs have a full live environment. The desktop environment can be started by going into bash, and typing `startx`. Legacy ISOs only have a text live environment.
|
||||
|
||||
If you want to know what commandlines are used for the ISOs, read path/wdvn-makeall.
|
||||
|
||||
**NOTE:** i386 refers to the i686 class of processors, here. That is Pentium Pro and up. **However**, [due to the lack of care from the Rust team](https://github.com/rust-lang/rust/issues/82435), and to a lesser extent, [a mistake on LLVM's part](https://github.com/llvm/llvm-project/issues/61347), as well as an overall lack of interest of both parties, you will find some packages, especially graphical ones, not working unless you're using a Pentium M, Pentium 4 or newer processor.
|
||||
**NOTE 1:** [Debian is looking to *basically* end support for 32-bit x86 architectures in their next major release](https://dev1galaxy.org/viewtopic.php?id=6266) ([Alternate source](https://release.debian.org/trixie/arch_qualify.html)). [This, by extension, also extends to Devuan](https://dev1galaxy.org/viewtopic.php?pid=47335#p47335), and as such also windvn. Because of this, Devuan 5 (Daedalus) is the last major release I will support with windvn. *Once mainstream support ends for Daedalus, windvn will be discontinued.*
|
||||
|
||||
This issue is currently on Debian (and other distros) to fix (although it *really* shouldn't be), [they care about this issue](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=973414). As of Bullseye (Chimaera), it still persists however.
|
||||
|
||||
If you use old hardware, you might want to try [archlinux32](https://archlinux32.org/) for now. They're crazy and fix this stuff with force, from what I saw. I haven't tested it myself yet.
|
||||
**NOTE 2:** i386 refers to the i686 class of processors, here. That is Pentium Pro and up. **However**, [due to the lack of care from the Rust team](https://github.com/rust-lang/rust/issues/82435), and to a lesser extent, [a mistake on LLVM's part](https://github.com/llvm/llvm-project/issues/61347), as well as an overall lack of interest of both parties, you will find some packages, especially graphical ones, not working unless you're using a Pentium M, Pentium 4 or newer processor.
|
||||
|
||||
# How to "build"
|
||||
## Prerequisites
|
||||
- You need to use Devuan or windvn
|
||||
- `apt install git debootstrap grub-common grub-pc-bin grub-efi-ia32-bin grub-efi-amd64-bin mtools squashfs-tools xorriso`
|
||||
- `apt install git debootstrap grub-common grub-pc-bin grub-efi-ia32-bin grub-efi-amd64-bin mtools squashfs-tools xorriso xxd`
|
||||
---
|
||||
|
||||
1. **Clone Git repository:**
|
||||
|
@ -1,2 +1,3 @@
|
||||
sources-proprietary
|
||||
firmware-proprietary-licenses
|
||||
firmware-proprietary
|
8
mods/firmware-proprietary-licenses/data/chroot
Executable file
8
mods/firmware-proprietary-licenses/data/chroot
Executable file
@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
cat << EOF | debconf-set-selections
|
||||
firmware-ipw2x00 firmware-ipw2x00/license/accepted boolean true
|
||||
EOF
|
||||
|
||||
cat << EOF | debconf-set-selections
|
||||
firmware-ivtv firmware-ivtv/license/accepted boolean true
|
||||
EOF
|
@ -10,4 +10,4 @@ function sfp {
|
||||
done <<<$(apt-cache search "$1")
|
||||
echo "$packages"
|
||||
}
|
||||
echo "WDVN_PACKAGES=\"\$WDVN_PACKAGES firmware-linux firmware-misc-nonfree amd64-microcode intel-microcode $(sfp wireless) $(sfp wifi) $(sfp net) $(sfp nic)\"" >"/chroot-out"
|
||||
echo "WDVN_PACKAGES=\"\$WDVN_PACKAGES firmware-linux firmware-misc-nonfree amd64-microcode intel-microcode $(sfp wireless) $(sfp wifi) $(sfp net) $(sfp nic)\"" >"/chroot-out"
|
@ -1,3 +1,3 @@
|
||||
#!/bin/bash
|
||||
export WDVN_PACKAGES_DL="$WDVN_PACKAGES_DL xinit unifont feh autorandr openbox mlterm lxpanel lxrandr pcmanfm mate-polkit"
|
||||
export WDVN_PACKAGES_DL="$WDVN_PACKAGES_DL xinit unifont connman-gtk feh autorandr openbox mlterm lxpanel lxrandr pcmanfm"
|
||||
export WDVN_PACKAGES_REMOVE="$WDVN_PACKAGES_REMOVE xscreensaver"
|
||||
|
@ -2,11 +2,11 @@
|
||||
Encoding=UTF-8
|
||||
Version=0.9.4
|
||||
Type=Application
|
||||
Name=Lock screen on standby
|
||||
Name=connman
|
||||
Comment=
|
||||
Exec=wdvn-lock
|
||||
Exec=connman-gtk --tray
|
||||
OnlyShowIn=XFCE;
|
||||
RunHook=4
|
||||
RunHook=0
|
||||
StartupNotify=false
|
||||
Terminal=false
|
||||
Hidden=false
|
@ -4,7 +4,7 @@ Version=0.9.4
|
||||
Type=Application
|
||||
Name=lockscreen
|
||||
Comment=
|
||||
Exec=xautolock -time 15 -corners 0-00 -locker wdvn-lock
|
||||
Exec=bash -c 'xset s 900 5; XSECURELOCK_BLANK_DPMS_STATE="off" XSECURELOCK_SHOW_DATETIME=1 XSECURELOCK_DATETIME_FORMAT="%%A - %%d.%%m.%%Y, %%H:%%M:%%S" XSECURELOCK_DISCARD_FIRST_KEYPRESS=0 XSECURELOCK_BLANK_TIMEOUT=5 XSECURELOCK_AUTH_TIMEOUT=20 xss-lock -n /usr/lib/xsecurelock/dimmer -l -- xsecurelock'
|
||||
OnlyShowIn=XFCE;
|
||||
RunHook=0
|
||||
StartupNotify=false
|
||||
|
@ -27,7 +27,7 @@ menu-height=500
|
||||
menu-opacity=100
|
||||
command-settings=xfce4-settings-manager
|
||||
show-command-settings=true
|
||||
command-lockscreen=xflock4
|
||||
command-lockscreen=xset s activate
|
||||
show-command-lockscreen=true
|
||||
command-switchuser=dm-tool switch-to-greeter
|
||||
show-command-switchuser=false
|
||||
|
@ -45,12 +45,12 @@
|
||||
<property name="Print" type="string" value="wdvn-screenshot"/>
|
||||
<property name="<Primary><Alt>t" type="string" value="exo-open --launch TerminalEmulator"/>
|
||||
<property name="<Super>p" type="string" value="xfce4-display-settings --minimal"/>
|
||||
<property name="<Primary><Shift>Escape" type="string" value="xfce4-taskmanager"/>
|
||||
<property name="<Primary><Shift>Escape" type="string" value="x-terminal-emulator -T htop -e htop"/>
|
||||
<property name="<Super>e" type="string" value="thunar"/>
|
||||
<property name="HomePage" type="string" value="exo-open --launch WebBrowser"/>
|
||||
<property name="XF86Display" type="string" value="xfce4-display-settings --minimal"/>
|
||||
<property name="override" type="bool" value="true"/>
|
||||
<property name="<Super>l" type="string" value="wdvn-lock"/>
|
||||
<property name="<Super>l" type="string" value="xset s activate"/>
|
||||
<property name="<Super>x" type="string" value="exo-open --launch TerminalEmulator"/>
|
||||
<property name="<Alt>F1" type="string" value="xfce4-popup-whiskermenu"/>
|
||||
</property>
|
||||
|
@ -3,7 +3,7 @@
|
||||
<channel name="xfce4-session" version="1.0">
|
||||
<property name="general" type="empty">
|
||||
<property name="FailsafeSessionName" type="empty"/>
|
||||
<property name="LockCommand" type="string" value="wdvn-lock"/>
|
||||
<property name="LockCommand" type="string" value="xset s activate"/>
|
||||
<property name="SessionName" type="string" value="Default"/>
|
||||
<property name="SaveOnExit" type="bool" value="false"/>
|
||||
</property>
|
||||
|
@ -1,2 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
XSECURELOCK_BLANK_DPMS_STATE="off" XSECURELOCK_SHOW_DATETIME=1 XSECURELOCK_DATETIME_FORMAT="%A - %d.%m.%Y, %H:%M:%S" XSECURELOCK_DISCARD_FIRST_KEYPRESS=0 XSECURELOCK_BLANK_TIMEOUT=5 XSECURELOCK_AUTH_TIMEOUT=20 xsecurelock
|
@ -1,2 +1,2 @@
|
||||
#!/bin/bash
|
||||
export WDVN_PACKAGES_DL="$WDVN_PACKAGES_DL xinit xorg xfce4 xfce4-*-plugin xfce4-power-manager gvfs gvfs-backends gvfs-fuse unifont scrot xclip netsurf-gtk xautolock xsecurelock qt5-style-plugins alsa-utils network-manager-gnome xfce4-terminal mousepad synaptic catfish galculator celluloid gpicview xpdf unrar-free engrampa blueman xscreensaver- lightdm-"
|
||||
export WDVN_PACKAGES_DL="$WDVN_PACKAGES_DL xinit xorg xfce4 xfce4-*-plugin xfce4-power-manager gvfs gvfs-backends gvfs-fuse unifont scrot xclip netsurf-gtk x11-xserver-utils xss-lock xsecurelock qt5-style-plugins alsa-utils connman-gtk xfce4-terminal mousepad synaptic catfish galculator celluloid gpicview xpdf unrar-free engrampa blueman xscreensaver- lightdm-"
|
||||
|
@ -1 +0,0 @@
|
||||
GRUB_DISABLE_OS_PROBER=false
|
@ -1,2 +1,3 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
echo "$(head -c4 </dev/urandom|xxd -p -u)" >"$1/etc/hostname"
|
@ -83,6 +83,14 @@ def callList(*args,**kwargs):
|
||||
def getDisks():
|
||||
return callList(["lsblk","-ndo","PATH"])
|
||||
|
||||
def getDiskId(diskPath):
|
||||
for root,dirs,files in os.walk("/dev/disk/by-id"):
|
||||
for file in files:
|
||||
if os.path.realpath("/dev/disk/by-id/" +file) == diskPath:
|
||||
return "/dev/disk/by-id/" +file
|
||||
break
|
||||
return diskPath
|
||||
|
||||
def getPartitions():
|
||||
disks = getDisks()
|
||||
partitions = callList(["lsblk","-no","PATH"])
|
||||
@ -113,16 +121,22 @@ def getDiskTable(disk):
|
||||
length = len(results)
|
||||
index = length - 1
|
||||
while index >= 0:
|
||||
if results[index] == "": break
|
||||
if results[index] != "" and results[index][0] != "/": break
|
||||
index -= 1
|
||||
if index < 0: return {}
|
||||
results = results[index + 2:]
|
||||
results = results[index + 1:]
|
||||
length = len(results)
|
||||
|
||||
index = 0
|
||||
while index < length:
|
||||
while results[index].replace(" "," ") != results[index]:
|
||||
results[index] = results[index].replace(" "," ")
|
||||
|
||||
if results[index] == "" or results[index][0] != "/":
|
||||
del results[index]
|
||||
length -= 1
|
||||
continue
|
||||
|
||||
results[index] = results[index].split(" ")
|
||||
index += 1
|
||||
|
||||
@ -187,15 +201,26 @@ def chroot(path,cmd,*args,**kwargs):
|
||||
pass
|
||||
raise e
|
||||
|
||||
def randhex(length):
|
||||
chars = "0123456789ABCDEF"
|
||||
def randomString(length,chars):
|
||||
charsLength = len(chars)
|
||||
output = ""
|
||||
cLength = 0
|
||||
while cLength < length:
|
||||
output = output + chars[random.randrange(0,15)]
|
||||
cLength += 1
|
||||
index = 0
|
||||
while index < length:
|
||||
output = output + chars[random.randrange(0,charsLength)]
|
||||
index += 1
|
||||
return output
|
||||
|
||||
def randomHex(length):
|
||||
return randomString(length,"0123456789ABCDEF")
|
||||
|
||||
def debconfSetSelections(root,options):
|
||||
proc = subprocess.Popen(["chroot",root,"debconf-set-selections"],stdin=subprocess.PIPE)
|
||||
proc.stdin.write((options + "\n").encode("utf-8"))
|
||||
proc.stdin.flush()
|
||||
proc.stdin.close()
|
||||
rtn = proc.wait()
|
||||
if rtn != 0: raise Exception("Process returned error: " +str(rtn))
|
||||
|
||||
def main():
|
||||
while choiceYn("Partition disk?"):
|
||||
try:
|
||||
@ -269,10 +294,10 @@ def main():
|
||||
formatEsp = False
|
||||
if gptInfo["espFormatted"] == False:
|
||||
formatEsp = choiceYn("The disk's ESP partition (" +gptInfo["espPart"]+ ") does not seem to be formatted correctly. Format it?")
|
||||
|
||||
defaultChoice = "i386"
|
||||
if callString(["uname","-m"]) == "x86_64": defaultChoice = "x86_64"
|
||||
grubVersion = choice("Which version of EFI GRUB should be installed? Note that 'both' is not always compatible.",["i386","x86_64","both"],defaultChoice)
|
||||
|
||||
defaultChoice = "i386"
|
||||
if callString(["uname","-m"]) == "x86_64": defaultChoice = "x86_64"
|
||||
grubVersion = choice("Which version of EFI GRUB should be installed? Note that 'both' is not always compatible.",["i386","x86_64","both"],defaultChoice)
|
||||
|
||||
print("")
|
||||
print("The rest of this setup will continue without your input ...")
|
||||
@ -347,7 +372,7 @@ def main():
|
||||
call(["unsquashfs","-f","-d",ipth(),"/lib/live/mount/medium/live/filesystem.squashfs"])
|
||||
|
||||
print("Setting hostname ...")
|
||||
hostname = randhex(8)
|
||||
hostname = randomHex(8)
|
||||
fh = open(ipth("etc/hostname"),"w")
|
||||
fh.write(hostname + "\n")
|
||||
fh.close()
|
||||
@ -388,6 +413,11 @@ def main():
|
||||
|
||||
if installGRUB:
|
||||
print("> Installing GRUB")
|
||||
debconfSetSelections(ipth(),"grub-pc grub-pc/install_devices multiselect " +getDiskId(grubDisk))
|
||||
debconfSetSelections(ipth(),"grub-pc grub2/enable_os_prober boolean true")
|
||||
os.environ["DEBIAN_FRONTEND"] = "noninteractive"
|
||||
chroot(ipth(),["dpkg-reconfigure","grub-pc"])
|
||||
del os.environ["DEBIAN_FRONTEND"]
|
||||
|
||||
if gptInfo["isGPT"]:
|
||||
if gptInfo["espPart"] != None:
|
||||
@ -401,10 +431,11 @@ def main():
|
||||
call(["mount",gptInfo["espPart"],ipth("boot/efi")])
|
||||
|
||||
print("Installing GRUB (EFI) ...")
|
||||
if grubVersion in ["i386","both"]:
|
||||
chroot(ipth(),["grub-install","--target=i386-efi","--uefi-secure-boot","--efi-directory=/boot/efi","--boot-directory=/boot",grubDisk])
|
||||
if grubVersion in ["x86_64","both"]:
|
||||
chroot(ipth(),["grub-install","--target=x86_64-efi","--uefi-secure-boot","--efi-directory=/boot/efi","--boot-directory=/boot",grubDisk])
|
||||
grubTargets = []
|
||||
if grubVersion in ["i386","both"]: grubTargets.append("i386-efi")
|
||||
if grubVersion in ["x86_64","both"]: grubTargets.append("x86_64-efi")
|
||||
for target in grubTargets:
|
||||
chroot(ipth(),["grub-install","--target=" +target,"--bootloader-id=GRUB","--efi-directory=/boot/efi","--boot-directory=/boot","--force-extra-removable",grubDisk])
|
||||
|
||||
print("Unmounting ESP ...")
|
||||
call(["umount","-l",ipth("boot/efi")])
|
||||
|
@ -1,8 +1,5 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
cat << EOF | debconf-set-selections
|
||||
firmware-ipw2x00 firmware-ipw2x00/license/accepted boolean true
|
||||
EOF
|
||||
apt-get --error-on=any -y update
|
||||
apt-get -y upgrade
|
||||
apt-get -y install $WDVN_PACKAGES_INTERACTIVE
|
||||
|
1
mods/packages-base/data/etc/default/connman
Normal file
1
mods/packages-base/data/etc/default/connman
Normal file
@ -0,0 +1 @@
|
||||
DAEMON_OPTS="--nodnsproxy"
|
@ -1,2 +1,2 @@
|
||||
#!/bin/bash
|
||||
export WDVN_PACKAGES="$WDVN_PACKAGES sudo kbd console-setup keyboard-configuration htop network-manager"
|
||||
export WDVN_PACKAGES="$WDVN_PACKAGES sudo kbd console-setup keyboard-configuration htop connman isc-dhcp-client-"
|
||||
|
16
mods/setnet/data/chroot
Executable file
16
mods/setnet/data/chroot
Executable file
@ -0,0 +1,16 @@
|
||||
#!/usr/bin/env bash
|
||||
command -v wget >/dev/null
|
||||
WGET_INSTALL="$?"
|
||||
set -e
|
||||
|
||||
if [ "$WGET_INSTALL" = "1" ]; then
|
||||
apt-get -y install wget
|
||||
fi
|
||||
|
||||
wget "https://pkgmaster.devuan.org/devuan/pool/main/s/setnet/setnet_0.4.0-1_all.deb"
|
||||
apt-get -y install "./setnet_0.4.0-1_all.deb"
|
||||
rm "./setnet_0.4.0-1_all.deb"
|
||||
|
||||
if [ "$WGET_INSTALL" = "1" ]; then
|
||||
apt-get -y remove --purge --auto-remove wget
|
||||
fi
|
11
mods/setnet/data/usr/local/share/applications/setnet_sh.desktop
Executable file
11
mods/setnet/data/usr/local/share/applications/setnet_sh.desktop
Executable file
@ -0,0 +1,11 @@
|
||||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Type=Application
|
||||
Name=setnet.sh
|
||||
Comment=Configure Networking (LAN/WiFi)
|
||||
Exec=x-terminal-emulator -e "sudo setnet.sh"
|
||||
Icon=preferences-system-network
|
||||
Path=
|
||||
Terminal=false
|
||||
StartupNotify=false
|
||||
Categories=Settings;HardwareSettings;
|
@ -1,3 +1,3 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
debootstrap --arch="$WDVN_ARCH" "$WDVN_VER" "$1" "$WDVN_URL"
|
||||
debootstrap --arch="$WDVN_ARCH" "$WDVN_VER_DEBSTRAP" "$1" "$WDVN_URL"
|
@ -69,6 +69,14 @@ menuentry '$WDVN_NAME $WDVN_ARCH $WDVN_VER $WDVN_DATE live' --class gnu-linux --
|
||||
echo "Loading initrd ..."
|
||||
initrd /live/initrd.img
|
||||
}
|
||||
|
||||
menuentry '$WDVN_NAME $WDVN_ARCH $WDVN_VER $WDVN_DATE live (RAM-boot)' --class gnu-linux --id linux {
|
||||
insmod all_video
|
||||
echo "Loading Linux ..."
|
||||
linux /live/vmlinuz boot=live noautologin quiet toram
|
||||
echo "Loading initrd ..."
|
||||
initrd /live/initrd.img
|
||||
}
|
||||
" > "$IMAGE/boot/grub/grub.cfg"
|
||||
|
||||
grub-mkrescue -o "$2" "$IMAGE" --volid "$DISC_NAME"
|
||||
|
@ -7,7 +7,7 @@ fi
|
||||
|
||||
# i386 legacy (single language)
|
||||
source wdvn-env-i386
|
||||
WDVN_FAT=0 wdvn-make "output" shrink-nodocs base hardware graphical-me.fier.de live finish legacy
|
||||
WDVN_FAT=0 wdvn-make "output" shrink-nodocs shrink-singlelanguage base hardware graphical-me.fier.de live finish legacy
|
||||
wdvn-image-iso "output" "$(wdvn-name)_legacy_en.iso"
|
||||
rm -rf "output"
|
||||
|
||||
|
4
shell
4
shell
@ -1,11 +1,13 @@
|
||||
#!/bin/bash
|
||||
export WDVN_NAME="windvn"
|
||||
export WDVN_URL="http://deb.devuan.org/merged"
|
||||
export WDVN_VER="chimaera"
|
||||
export WDVN_VER_DEBSTRAP="chimaera" # This is the suite/version name passed to debootstrap. This is useful if you want to pull, for example, daedalus, but that name is not understood yet in debootstrap. So you can use "testing" instead, which is always understood, and then put "daedalus" (or whatever currently corresponds to testing) into WDVN_VER, so the resulting distro stays within the daedalus specification, instead of updating to the next testing version.
|
||||
export WDVN_VER="$WDVN_VER_DEBSTRAP"
|
||||
|
||||
export WDVN_DATE="$(date --utc "+%Y.%m.%d-%H.%M.%S")"
|
||||
export WDVN_PID="$BASHPID"
|
||||
export PATH="$(dirname "$(realpath -s "$BASH_SOURCE")")/path:$PATH"
|
||||
source "wdvn-env-i386"
|
||||
export WDVN_FULLNAME=
|
||||
export DEBIAN_FRONTEND="noninteractive"
|
||||
export PS1="\[\033[0;35m\]\$(wdvn-name)\[\033[0m\]:\[\033[0;37m\]\$(basename -- \$PWD)\[\033[0m\]> "
|
Loading…
Reference in New Issue
Block a user