10 Commits

21 changed files with 337 additions and 26 deletions

View File

@@ -4,8 +4,8 @@ date: 2022-10-03
type: "page"
---
The goal of the **Linux Users Group at UCLA (LUG@UCLA)** is to promote computer
users' freedom with Linux and other Free/Open Source Software (FOSS).
The **Linux Users Group at UCLA (LUG@UCLA)** has promoted computer
users' freedom with Linux and other Free & Open Source Software (FOSS) since 1998.
## Activities

View File

@@ -0,0 +1,13 @@
---
title: "Alumni Night"
date: 2025-11-10
tags: [events]
author: LUG Board
---
David Z., the man himself who revived UCLA LUG in 2022, who has worked at Tesla and Apple, is visiting from the Bay Area. You can ask him about UCLA LUG history, what distros he recommends, how Linux is used in industry, how to get internships, or just joke around.
* **Date**: 2025-11-13
* **Time**: 6-8 PM
* **Location**: Boelter Hall 4283

View File

@@ -0,0 +1,14 @@
---
title: "LUG FOSS Projects"
date: 2025-10-19
tags: [events]
author: LUG Board
---
We are having a meeting on Thursday where we go over the different free and open
source projects LUG is planning to create. Come visit if you're interested in
working on a software project with your fellow LUG members.
* Date: 2025-10-23, Thursday
* Time: 6-8 PM
* Location: Boelter Hall 4283

View File

@@ -0,0 +1,44 @@
---
title: "Fall 2025 Installfest"
date: 2025-10-02
tags: [events, installfests]
author: LUG Board
---
Free Pizza will be provided!!!
The Linux Users Group (LUG) at UCLA invites you to attend the quarterly Linux
Installfest! Please fill out the [RSVP form](https://forms.gle/Y13NJVaecBGSsP5X7)
to indicate your pizza preferences.
* Date: 2024-10-10 (Friday of Week 2)
* Time: 6-9 PM
* Location: Engineering IV, Maxwell Room (57-124)
* RSVP: [link](https://forms.gle/Y13NJVaecBGSsP5X7)
## General Info
LUG hosts a quarterly installfest on Friday of the 2nd week. We will start by
giving a presentation on Linux to get newcomers up to speed. Then, attendees
will be provided a USB drive and guided in dual booting their computers with
Linux (most likely Ubuntu, Debian, or Linux Mint). However, you are welcome to
bring your own flash drives and install any distro of your choice. Or if you
don't feel comfortable with the possibility of losing data, you can set
up a Virtual Machine instead.
The officers will also be doing a show-and-tell of their own hardware which
they have installed Linux on. Experienced users are also encouraged to show off
their own setups.
At the end, we'll have a SuperTuxKart LAN party with our freshly installed
Linux machines and do a giveaway of some Dell Optiplexes.
## Past Installfests
You can view pictures from past installfests [here](https://linux.ucla.edu/zenphoto/).
## Note on M1 and M2 Macs
Due to their custom Apple silicon, the only Linux distro which works on M1/M2/M3
Macs is the experimental Asahi Linux. You also have the option of setting up a
Virtual Machine to run Linux so feel free to come and chat with us!

View File

@@ -0,0 +1,13 @@
---
title: "Spooky E-Waste Tour 👻🎃"
date: 2025-10-29
tags: [events]
author: LUG Board
---
It's like trick-or-treating except the goodies aren't edible. Costumes (or painted nails 💅) are highly encouraged. Meet by the compass statue at the fifth floor Boelter entrance.
* **Date**: 2025-10-31
* **Time**: 8-10 PM
* **Location**: Boelter Hall Main Entrance

View File

@@ -0,0 +1,13 @@
---
title: "Surprise Server Room Tour 🎉"
date: 2025-11-20
tags: [events]
author: LUG Board
---
We're inviting members of LUG for an exclusive look at the Boelter Hall server room, where we have our own rack and keep some spare e-waste as well.
* **Date**: 2025-11-20
* **Time**: 6-7 PM
* **Location**: Boelter Hall 3292

View File

@@ -8,12 +8,11 @@ Shared inbox: [board@linux.ucla.edu](mailto:board@linux.ucla.edu)
| Name | Position | Contact |
| --------------------- | ------------------------------- | ----------------------- |
| James Shiffer | Co-President | jshiffer@linux.ucla.edu |
| Lawrence Liu | Co-President | |
| Ethan Cheng | Vice President | ethan@linux.ucla.edu |
| Matthew Risley | Vice President | mrisley@linux.ucla.edu |
| Evan Aceves | Vice President | eaceves@linux.ucla.edu |
| Mustafa E. | Officer | mstf@linux.ucla.edu |
| Ethan Cheng | President | ethan@linux.ucla.edu |
| James Shiffer | External Vice President | jshiffer@linux.ucla.edu |
| Alexander Chang | Internal Vice President | ahjc@linux.ucla.edu |
| Evan Aceves | Marketing Vice President | eaceves@linux.ucla.edu |
| Max Mitterberger | Treasurer | mmitterberger@linux.ucla.edu |
| Professor Paul Eggert | Faculty Advisor (on sabbatical) | eggert@cs.ucla.edu |
## Join Us

View File

@@ -3,40 +3,77 @@ title: Email Account Guide
description: "How to log in with an email client, change your password, and the latest updates on the upcoming multi-factor authentication (MFA) mandate."
---
---
## NEW: Multi-Factor Authentication
The University is mandating that multi-factor authentication (MFA) be enabled for all email accounts by **May 1, 2025**. Specifically, we are using [Cisco Duo](https://duo.com/docs/duounix) as our MFA service, to be consistent with MyUCLA, UCLA Google Apps, and the UCLA Campus VPN.
The University is mandating that multi-factor authentication (MFA) be enabled for all email accounts by May 1, 2025. Specifically, we are using [Cisco Duo](https://duo.com/docs/duounix) as our MFA service, to be consistent with MyUCLA, UCLA Google Apps, and the UCLA Campus VPN. Even if you have UCLA Duo set up already, this uses a slightly different instance belonging to UCLA Computer Science specifically.
Your cooperation is **required** because you will eventually have to manually enroll your mobile device over SSH. If you fail to respond by the deadline, we will be forced to close your email account.
We have activated MFA starting on April 25. You must follow the below instructions to access your inbox.
No immediate action is required, because we are still waiting on the CS department to get in touch with Cisco and host their own Duo server. That being said, you must check your email inbox (or this page) regularly for future updates.
### Enrollment Instructions
**For non-UCLA students**: Please install the Duo app on your mobile device ([iOS](https://apps.apple.com/us/app/duo-mobile/id422663827), [Android](https://play.google.com/store/apps/details?id=com.duosecurity.duomobile&hl=en-US&pli=1)) at your earliest convenience if you haven't already.
1. Install the Duo app on your mobile device ([iOS](https://apps.apple.com/us/app/duo-mobile/id422663827), [Android](https://play.google.com/store/apps/details?id=com.duosecurity.duomobile&hl=en-US&pli=1)). You can also use a compatible [security key](https://guide.duo.com/security-keys).
2. SSH into your virtual machine.
3. Run `ssh [your username]@10.0.0.10` in the shell—this connects to the mail server.
{{< figure src="/duo/Screenshot from 2025-04-25 16-46-23.png" >}}
4. You will be prompted to enroll in Duo MFA. Paste any one of the links into your browser and follow the on-screen instructions.
{{< figure src="/duo/Screenshot 2025-04-25 at 16-43-30 Duo Security - Device Management.png" >}}
We recommend against using text messages as your authentication method, because they leave you vulnerable to [SIM swap attacks](https://www.cnet.com/news/privacy/do-you-use-sms-for-two-factor-authentication-heres-why-you-shouldnt/).
{{< figure src="/duo/Screenshot 2025-04-25 at 16-43-47 Duo Security - Device Management.png" >}}
{{< figure src="/duo/Screenshot 2025-04-25 at 16-44-11 Duo Security - Device Management.png" >}}
{{< figure src="/duo/Screenshot 2025-04-25 at 16-44-24 Duo Security - Device Management.png" >}}
{{< figure src="/duo/Screenshot 2025-04-25 at 16-44-34 Duo Security - Device Management.png" >}}
{{< figure src="/duo/Screenshot 2025-04-25 at 16-44-55 Duo Security - Device Management.png" >}}
{{< figure src="/duo/Screenshot 2025-04-25 at 16-45-28 Duo Security - Device Management.png" >}}
{{< figure src="/duo/Screenshot 2025-04-25 at 16-45-42 Duo Security - Device Management.png" >}}
5. You can Ctrl+C out of the SSH password prompt once you've enrolled.
6. Try rerunning the last SSH command. You should now get a Duo push on your phone, which logs you in once accepted.
{{< figure src="/duo/IMG_6215.jpg" height="400" >}}
{{< figure src="/duo/Screenshot from 2025-04-25 16-59-20.png" >}}
Now would be a good time to change your password if you haven't done so already! Just run the `passwd` command on the "paris" server.
7. Now, you can log into your email inbox as you did before, with the added step of accepting the Duo push on your phone.
**NOTE:** your IMAP session is supposed to be cached for an hour to avoid spamming repeat Duo requests. Please contact us right away if this doesn't work as intended&mdash;hitting "deny" on the Duo pushes repeatedly will only lock you out of your account, requiring manual intervention from the CS Department! You can reach us on [Discord](/discord), [XMPP](https://xmpp.link/#main@room.linux.ucla.edu%3Fjoin), or use an alternative account to email [board@linux.ucla.edu](mailto:board@linux.ucla.edu).
---
## Logging in
I am using the following settings with Thunderbird to get in. I haven't tried it with another email client but you are welcome to.
SMTP:
### SMTP
Server Name: mail.linux.ucla.edu
Server Name: `mail.linux.ucla.edu`
Port: 587
[![img](https://linux.ucla.edu/mediawiki/images/thumb/9/9b/Hackerman.png/300px-Hackerman.png)](https://linux.ucla.edu/mediawiki/index.php/File:Hackerman.png)
Look at all the hackers getting banned for too many failed login attempts!
Port: `587`
Authentication method: Normal password
Connection security: STARTTLS
IMAP:
### IMAP
Server Name: mail.linux.ucla.edu
Server Name: `mail.linux.ucla.edu`
Port: 993
Port: `993`
Authentication method: Normal Password
@@ -44,6 +81,6 @@ Connection security: SSL/TLS
## Changing your password
To change the password, please ssh into your web server and ssh to [your username]@10.0.0.10. Then use passwd to change your password.
To change the password, SSH into your virtual machine and run the shell command `ssh [your username]@10.0.0.10`. Accept the Duo MFA push, or follow the MFA enrollment instructions if it's your first time. Then use the `passwd` command to change your password.
(Yes we know, this is a pretty crappy and inelegant solution, but it's good enough for now)

176
create_event.sh Executable file
View File

@@ -0,0 +1,176 @@
#!/bin/bash
# Function to prompt for input with a default value
prompt() {
local prompt_text="$1"
local default_val="$2"
local var_name="$3"
if [ -n "$default_val" ]; then
read -p "$prompt_text [$default_val]: " input
eval $var_name="\${input:-$default_val}"
else
read -p "$prompt_text: " input
eval $var_name="\$input"
fi
}
# --- 1. Gather Event Details ---
echo "--- New Event Wizard ---"
prompt "Event Name" "" EVENT_NAME
prompt "Date (YYYY-MM-DD)" "$(date +%Y-%m-%d)" EVENT_DATE
prompt "Time (e.g. 6-9 PM)" "6-9 PM" EVENT_TIME
prompt "Location" "Engineering IV, Maxwell Room (57-124)" EVENT_LOCATION
prompt "Ping Preference (1: @everyone, 2: @UCLA, 3: None)" "3" PING_CHOICE
case $PING_CHOICE in
1) PING_TEXT="@everyone" ;;
2) PING_TEXT="<@&1000205372327481444>" ;; # Assuming @UCLA role ID, replace if known or use generic
*) PING_TEXT="" ;;
esac
echo "Enter Description (Markdown supported). Press Ctrl+D on a new line to finish:"
EVENT_DESCRIPTION=$(cat)
echo "" # Add newline after input
# Slugify event name for filename
SLUG=$(echo "$EVENT_NAME" | iconv -t ascii//TRANSLIT | sed -r s/[^a-zA-Z0-9]+/-/g | sed -r s/^-+\|-+$//g | tr A-Z a-z)
FILENAME="content/events/${SLUG}.md"
# --- 2. Generate Hugo Content ---
echo "Generating $FILENAME..."
cat <<EOF > "$FILENAME"
---
title: "$EVENT_NAME"
date: $(date +%Y-%m-%d)
tags: [events]
author: LUG Board
---
$EVENT_DESCRIPTION
* **Date**: $EVENT_DATE
* **Time**: $EVENT_TIME
* **Location**: $EVENT_LOCATION
EOF
echo "Hugo page created."
# --- 3. Discord Notification (Webhook) ---
# Check for env var or prompt
if [ -z "$DISCORD_WEBHOOK_URL" ]; then
prompt "Enter Discord Webhook URL (leave empty to skip)" "" DISCORD_WEBHOOK_URL
fi
if [ -n "$DISCORD_WEBHOOK_URL" ]; then
echo "Sending Discord announcement..."
# Construct JSON payload
# Note: Using jq would be safer, but manual construction avoids dependencies if simple
# Escaping quotes in description for JSON
SAFE_DESC=$(echo "$EVENT_DESCRIPTION" | sed 's/"/\\"/g' | sed ':a;N;$!ba;s/\n/\\n/g')
JSON_PAYLOAD=$(cat <<EOF
{
"content": "$PING_TEXT **New Event: $EVENT_NAME**",
"embeds": [
{
"title": "$EVENT_NAME",
"description": "$SAFE_DESC",
"color": 5814783,
"fields": [
{
"name": "When",
"value": "$EVENT_DATE @ $EVENT_TIME",
"inline": true
},
{
"name": "Where",
"value": "$EVENT_LOCATION",
"inline": true
}
]
}
]
}
EOF
)
curl -H "Content-Type: application/json" -d "$JSON_PAYLOAD" "$DISCORD_WEBHOOK_URL"
echo -e "\nAnnouncement sent."
else
echo "Skipping Discord announcement."
fi
# --- 4. Discord Calendar Event ---
# Requires Bot Token and Guild ID
if [ -z "$DISCORD_BOT_TOKEN" ]; then
prompt "Enter Discord Bot Token (leave empty to skip calendar)" "" DISCORD_BOT_TOKEN
fi
if [ -z "$DISCORD_GUILD_ID" ] && [ -n "$DISCORD_BOT_TOKEN" ]; then
prompt "Enter Discord Guild ID" "" DISCORD_GUILD_ID
fi
if [ -n "$DISCORD_BOT_TOKEN" ] && [ -n "$DISCORD_GUILD_ID" ]; then
echo "Creating Discord Calendar Event..."
# Need ISO8601 timestamp for start_time.
# Attempt to parse date and time. This is tricky in bash without strict format.
# Assuming user input follows YYYY-MM-DD and roughly HH:MM format or we just use the date at a default time if parsing fails?
# Let's try to be smart: Date + Start time.
# Extract start time from "6-9 PM" -> "18:00"
# This is a simplification. For robust parsing, might need python or date utils.
# Extract start hour and minute
START_HOUR=$(echo "$EVENT_TIME" | grep -oE '^[0-9]+' | head -1)
START_MINUTE=$(echo "$EVENT_TIME" | grep -oE ':[0-9]+' | sed 's/://' | head -1)
START_MINUTE=${START_MINUTE:-00}
if [[ "$EVENT_TIME" == *"PM"* ]] && [ "$START_HOUR" -lt 12 ]; then
START_HOUR=$((START_HOUR + 12))
fi
# Construct ISO string with timezone using date command
START_DATE_STR="$EVENT_DATE $START_HOUR:$START_MINUTE"
START_ISO=$(date -d "$START_DATE_STR" --iso-8601=seconds)
# End time: Start + 2 hours
# Use START_ISO as base to ensure correct calculation
END_ISO=$(date -d "$START_ISO + 2 hours" --iso-8601=seconds)
# Location Type 3 is "External"
CAL_PAYLOAD=$(cat <<EOF
{
"name": "$EVENT_NAME",
"description": "$SAFE_DESC",
"scheduled_start_time": "$START_ISO",
"scheduled_end_time": "$END_ISO",
"privacy_level": 2,
"entity_type": 3,
"entity_metadata": {
"location": "$EVENT_LOCATION"
}
}
EOF
)
RESPONSE=$(curl -s -w "\n%{http_code}" -X POST "https://discord.com/api/v10/guilds/$DISCORD_GUILD_ID/scheduled-events" \
-H "Authorization: Bot $DISCORD_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d "$CAL_PAYLOAD")
HTTP_BODY=$(echo "$RESPONSE" | head -n -1)
HTTP_STATUS=$(echo "$RESPONSE" | tail -n 1)
if [[ "$HTTP_STATUS" =~ ^2 ]]; then
echo -e "\nCalendar event created."
else
echo -e "\nFailed to create calendar event. HTTP $HTTP_STATUS"
echo "Response: $HTTP_BODY"
echo "Payload: $CAL_PAYLOAD"
fi
else
echo "Skipping Calendar event."
fi
echo "Done!"

View File

@@ -12,21 +12,23 @@
66% {color: #4545e8; }
}
</style>
<!--
<ul>
<li>
<a href="/events">
Next Weekly Meeting: <span class="magic"></span> at 6 PM, Slichter Hall Room 2834
Next Weekly Meeting: <span class="magic" id="next-meeting-date"></span> at 6 PM, Slichter Hall Room 2834
</a>
</li>
<li>
<a href="/wiki/emails">
Email Multi-Factor Authentication deadline: <span class="magic">Thu May 01 2025</span>
<span class="magic">ACTION REQUIRED:</span> Enroll in Email Multi-Factor Authentication
</a>
</li>
</ul>
-->
<script>
document.addEventListener('DOMContentLoaded', function () {
var nextThursday = new Date(Date.now() + (((4 - new Date().getDay() + 7) % 7) * 86400000));
document.querySelector('span.magic').innerHTML = nextThursday.toDateString();
document.getElementById('next-meeting-date').innerHTML = nextThursday.toDateString();
});
</script>

BIN
static/duo/IMG_6215.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB